如何在C#中将常规字符串转换为ASCII十六进制字符串?

时间:2012-04-04 13:29:46

标签: c# .net string hex

我最近正在开发一个项目,我需要将常规字符串转换为ASCIII十六进制并将十六进制存储在字符串中。

所以我有类似

的东西
string random_string = "4000124273218347581"

我希望将其转换为

形式的十六进制字符串
string hex_string = "34303030313234323733323138333437353831"

这可能看起来像一个奇怪的特定任务,但它是我遇到的一个,当我试图找到如何执行它时,我在网上找不到任何答案。

无论如何,我想出来并创建了一个类来使我的代码更整洁。

如果其他人需要将常规字符串转换为十六进制字符串,我将在一个包含我的解决方案的时刻发布答案。

(我对stackoverflow相当新,所以我希望这样做是可以的)

=========================================

事实证明,由于没有足够高的声誉,我在提问的前8个小时内无法自己回答我的问题。

所以我在这里坚持我的答案:

好的,所以这是我的解决方案:

我在命名空间

中创建了一个名为StringToHex的类
public class StringToHex
{
    private string localstring;
    private char[] char_array;
    private StringBuilder outputstring = new StringBuilder();
    private int value;

    public StringToHex(string text)
    {
        localstring = text;
    }

    public string ToAscii()
    {
        /* Convert text into an array of characters */
        char_array = localstring.ToCharArray();
        foreach (char letter in char_array)
        {
            /* Get the integral value of the character */
            value = Convert.ToInt32(letter);

            /* Convert the decimal value to a hexadecimal value in string form */
            string hex = String.Format("{0:X}", value);

            /* Append hexadecimal version of the char to the string outputstring*/
            outputstring.Append(Convert.ToString(hex));
        }
    return outputstring.ToString();
    }
}

要使用它,你需要做一些形式的事情:

/* Convert string to hexadecimal */
StringToHex an_instance_of_stringtohex = new StringToHex(string_to_convert);
string converted_string = an_instance_of_stringtohex.ToAscii();

如果它正常工作,转换后的字符串应该是原始字符串长度的两倍(由于十六进制使用两个字节来表示每个字符)。

现在,正如某人已经指出的那样,你可以在这里找到一篇类似的文章:

http://www.c-sharpcorner.com/UploadFile/Joshy_geo/HexConverter10282006021521AM/HexConverter.aspx

但我没有找到对我的具体任务有多大帮助,我想我的解决方案更优雅;)

3 个答案:

答案 0 :(得分:7)

只要字符串中的字符代码不大于255(0xFF):

,这就有效
string hex_string =
  String.Concat(random_string.Select(c => ((int)c).ToString("x2")));

注意:这也适用于低于16(0x10)的字符代码,例如它会从换行符"0D0A"生成十六进制代码"\r\n",而不是"DA"

答案 1 :(得分:2)

您需要阅读以下文章 -

http://www.c-sharpcorner.com/UploadFile/Joshy_geo/HexConverter10282006021521AM/HexConverter.aspx

将数据转换为十六进制格式的主要功能

public string Data_Hex_Asc(ref string Data)
{
    string Data1 = "";
    string sData = "";
    while (Data.Length > 0)
    //first take two hex value using substring.
    //then convert Hex value into ascii.
    //then convert ascii value into character.
    {
        Data1 = System.Convert.ToChar(System.Convert.ToUInt32(Data.Substring(0, 2),  16)).ToString();
        sData = sData + Data1;
         Data = Data.Substring(2, Data.Length - 2);
    }
    return sData;
}

看看你是否正在寻找。

答案 2 :(得分:-1)

好的,所以这是我的解决方案:

我在命名空间

中创建了一个名为StringToHex的类
public class StringToHex
{
    private string localstring;
    private char[] char_array;
    private StringBuilder outputstring = new StringBuilder();
    private int value;

    public StringToHex(string text)
    {
        localstring = text;
    }

    public string ToAscii()
    {
        /* Convert text into an array of characters */
        char_array = localstring.ToCharArray();
        foreach (char letter in char_array)
        {
            /* Get the integral value of the character */
            value = Convert.ToInt32(letter);

            /* Convert the decimal value to a hexadecimal value in string form */
            string hex = String.Format("{0:X}", value);

            /* Append hexadecimal version of the char to the string outputstring*/
            outputstring.Append(Convert.ToString(hex));
        }
    return outputstring.ToString();
    }
}

要使用它,你需要做一些形式的事情:

/* Convert string to hexadecimal */
StringToHex an_instance_of_stringtohex = new StringToHex(string_to_convert);
string converted_string = an_instance_of_stringtohex.ToAscii();

如果它正常工作,转换后的字符串应该是原始字符串长度的两倍(由于十六进制使用两个字节来表示每个字符)。

现在,正如某人已经指出的那样,你可以在这里找到一篇类似的文章:

http://www.c-sharpcorner.com/UploadFile/Joshy_geo/HexConverter10282006021521AM/HexConverter.aspx

但我没有找到对我的具体任务有多大帮助,我想我的解决方案更优雅;)