【发布时间】: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 位)。但重点是:你想做什么?再次将十六进制转换为...十六进制?尝试用输入字符串、转换字符串、输出字符串的例子来说明你想得到什么。