【问题标题】:Hex string to ASCII conversion and ASCII to Hex conversion issue十六进制字符串到 ASCII 转换和 ASCII 到十六进制转换问题
【发布时间】:2015-05-22 11:23:40
【问题描述】:

我写了两种方法来将十六进制字符串转换为 ASCII 和 ASCII 字符串转换为十六进制字符串。但是当我比较这两个字符串时,我得到了两个不同的十六进制字符串。

例如: 十六进制字符串 = 6220000008a01000

我使用下面的方法将此字符串转换为 ASCII

public static string ConvertHex(string hexString)
{
    try
    {
        string ascii = string.Empty;

        for (int i = 0; i < hexString.Length; i += 2)
        {
            string hs = string.Empty;

            hs = hexString.Substring(i, 2);
            ulong decval = Convert.ToUInt64(hs, 16);
            long deccc = Convert.ToInt64(hs, 16);
            char character = Convert.ToChar(deccc);
            ascii += character;

        }

        return ascii;
    }
    catch (Exception ex) { Console.WriteLine(ex.Message); }

    return string.Empty;
}

然后我使用下面的方法将该 ASCII 值转换回十六进制字符串

public string ASCIItoHex(string Value)
{
    StringBuilder sb = new StringBuilder();

    byte[] inputByte = Encoding.UTF8.GetBytes(Value);

    foreach (byte b in inputByte)
    {
        sb.Append(string.Format("{0:x2}", b));
    }

    return sb.ToString();
}

但作为最后的十六进制字符串,我得到了字符串以下。

十六进制字符串 = 6220000008c2a01000

谁能帮我弄清楚里面发生了什么?

【问题讨论】:

  • 您正在将 UTF8 编码的字符串转换为十六进制。您正在转换回 plain 字符串,假设流是...ASCII,逐字节读取。它不是。 UTF8 字符串中的某些字符可能超过一个字节。
  • 事实上,任何带有 0xa0 的二进制数据都是 not ASCII...(您现在实际上是在使用 ISO-8859-1 转换它,但仍然不是t 与 UTF-8 相同。)
  • 首先我将十六进制转换为 ASCII。当我将相同的 ASCII 值转换回十六进制时,它显示不同的值。
  • 谁能帮我从十六进制字符串中获取正确的 ASCII 值。
  • @soft009 UTF8 不是 ASCII(即使假设您认为 ASCII 为 8 位)。但重点是:你想做什么?再次将十六进制转换为...十六进制?尝试用输入字符串、转换字符串、输出字符串的例子来说明你想得到什么。

标签: c# hex ascii


【解决方案1】:

您尝试将十六进制字符串的两个字符(如“FF”)表示为单个char。那是行不通的。

您的“hexString”已经是您的十六进制数的字符串表示形式。

【讨论】:

  • 我需要两个十六进制字符串作为单个 ASCII 字符 62 - b 20 - 空格等。
猜你喜欢
  • 2011-11-27
  • 2014-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
  • 1970-01-01
  • 2012-11-14
相关资源
最近更新 更多