十六进制字符串到纯文本

时间:2014-01-15 16:53:10

标签: c# string hex ascii

我有十六进制表示以下列格式存储的ascii值。

// Hex reperesention of ascii string
string hexString = "48-65-6C-6C-6F-20-77-6F-72-6C-64-21-21-21";

// Could someone help fill in the blanks here? 
private string hexConverter(string hexString)
{
    string asciiCharString;

    // Convert it

    return asciiCharString;
}

所以当被召唤时;

string s = hexConverter(hexString);

字符串s将包含“Hello world !!!”在这种情况下。

3 个答案:

答案 0 :(得分:2)

var convertedString = new StringBuilder();

foreach(var hex in hexString.Split('-'))
{
    var unicode = int.Parse(hex, NumberStyles.HexNumber);
    convertedString.Append((char)unicode);
}

return convertedString.ToString();

答案 1 :(得分:0)

private string hexConverter(string hexString)
{
    string asciiCharString ="" ;

    var splitResult = hexString.Split('-');

    foreach (string hexChar in splitResult )
    {
        var byteChar = int.Parse(hexChar, NumberStyles.HexNumber);
        asciiCharString += (char)byteChar;
    }

    return asciiCharString;
}

// Test
private void button1_Click(object sender, EventArgs e)
{
    string hexString = "48-65-6C-6C-6F-20-77-6F-72-6C-64-21-21-21";
    string asciiString = hexConverter(hexString);

    MessageBox.Show(asciiString);
}

答案 2 :(得分:0)

让我们打破这个问题...

所以你首先要根据连字符(' - ')分解字符串。为此,我们将使用Split('-')。这会产生一个字符串数组。

hexString.Split('-')

然后我们想将这些字符串转换为数字。因为这是ASCII,所以我们将每个字符串转换为byte

byte.Parse(value, System.Globalization.NumberStyles.HexNumber)

我们有一堆byte后,我们可以使用ASCII编码器(String)将其转换为Encoding.ASCII.GetString()

所以要把它们放在一起:

static string hexConverter(string hexString)
{
  return Encoding.ASCII.GetString(fetchBytes(hexString).ToArray());
}

static IEnumerable<byte> fetchBytes(String hexString)
{
  foreach (var value in hexString.Split('-'))
    yield return byte.Parse(value, System.Globalization.NumberStyles.HexNumber);
}

<强>编码

如果您以后决定需要 UTF-8 或其他内容,那么您需要做的只是将Encoding.ASCII替换为Encoding.UTF8,其余的逻辑仍然有效。