【问题标题】:C# convert hexadecimal value in to UTF8 and ASCIIC# 将十六进制值转换为 UTF8 和 ASCII
【发布时间】:2013-10-02 05:25:25
【问题描述】:

我正在尝试将字符串中的十六进制值转换为 ASCII 值和 UTF8 值。但是当我执行以下代码时,它会打印出与输入相同的十六进制值

string hexString = "68656c6c6f2c206d79206e616d6520697320796f752e";
System.Text.UTF8Encoding  encoding=new System.Text.UTF8Encoding();
byte[] dBytes = encoding.GetBytes(hexString);

//To get ASCII value of the hex string.
string ASCIIresult = System.Text.Encoding.ASCII.GetString(dBytes);
MessageBox.Show(ASCIIresult, "Showing value in ASCII");

//To get the UTF8 value of the hex string
string utf8result = System.Text.Encoding.UTF8.GetString(dBytes);
MessageBox.Show(utf8result, "Showing value in UTF8");

【问题讨论】:

  • 您是否缺少将hexString 转换为字节的步骤?

标签: c# visual-studio-2010 decode


【解决方案1】:

由于您要命名变量hexString,我假设该值已经编码为十六进制格式。

这意味着以下内容将不起作用:

string hexString = "68656c6c6f2c206d79206e616d6520697320796f752e";
System.Text.UTF8Encoding  encoding=new System.Text.UTF8Encoding();
byte[] dBytes = encoding.GetBytes(hexString);

这是因为您将已编码的字符串视为纯 UTF8 文本。

您可能缺少将十六进制编码字符串转换为字节数组的步骤。

您可以使用 this SO post 来执行此操作,它显示了此功能:

public static byte[] StringToByteArray(String hex)
{
  int NumberChars = hex.Length/2;
  byte[] bytes = new byte[NumberChars];
  using (var sr = new StringReader(hex))
  {
    for (int i = 0; i < NumberChars; i++)
      bytes[i] = 
        Convert.ToByte(new string(new char[2]{(char)sr.Read(), (char)sr.Read()}), 16);
  }
  return bytes;
}

所以,最终的结果是这样的:

byte[] dBytes = StringToByteArray(hexString);

//To get ASCII value of the hex string.
string ASCIIresult = System.Text.Encoding.ASCII.GetString(dBytes);
MessageBox.Show(ASCIIresult, "Showing value in ASCII");

//To get the UTF8 value of the hex string
string utf8result = System.Text.Encoding.UTF8.GetString(dBytes);
MessageBox.Show(utf8result, "Showing value in UTF8");

【讨论】:

  • 感谢大家提供如此详细的答案。真的很有帮助。
【解决方案2】:

您应该首先将十六进制字符串转换为字节数组:

byte[] dBytes = Enumerable.Range(0, hexString.Length)
                 .Where(x => x % 2 == 0)
                 .Select(x => Convert.ToByte(hexString.Substring(x, 2), 16))
                 .ToArray();

【讨论】:

    【解决方案3】:

    我已经用这个方法转换任何

    public static string FromHex (string h) //Put your sequence of hex to convert to string.
    {
        if (h.Length % 2 != 0) 
            throw new ArgumentException("The string " + nameof(h) + " is not a valid Hex.", nameof(h));
        char[] CharFromHex = new char[h.Length / 2];
        int j = 0;
        for (int i = 0; i < h.Length; i += 2)
        {
            string hexSubStr = h.Substring(i, 2);
            CharFromHex[j] = (char)Convert.ToInt32(hexSubStr, 16);
            j += 1;
        }
        StringBuilder str = new StringBuilder();
        str.Append(CharFromHex);
        return str.ToString();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-27
      • 2012-12-10
      • 1970-01-01
      • 2011-08-04
      • 2017-08-28
      • 2011-08-02
      相关资源
      最近更新 更多