十六进制字符串到ASCII转换和ASCII到十六进制转换问题
问题描述:
我写了两种方法将十六进制字符串转换为ASCII和ASCII字符串为十六进制字符串。但是当我比较两个字符串时,我得到两个不同的十六进制字符串。十六进制字符串到ASCII转换和ASCII到十六进制转换问题
例如: 十六进制字符串= 6220000008a01000
我转换这个字符串使用以下方法
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和我使用以下方法转换该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
谁能帮我弄明白在那里发生什么事?
答
您试图将一个十六进制字符串的两个字符(如“FF”)表示为一个单独的char
。这是行不通的。
您的“hexString”已经是您的十六进制数字的字符串表示形式。
+0
我需要两个十六进制字符串作为单个ASCII字符 62 - b 20 - 空间 等。 – soft009 2015-03-19 11:40:08
您正在转换为十六进制UTF8编码的字符串。您将转换回_plain_字符串逐字节读取,假设流为... ASCII。不是。 UTF8字符串中的某些字符可能不止一个字节。 – 2015-03-19 11:15:56
事实上,任何带有0xa0的二进制数据都是* not * ASCII ...(实际上,您现在正在使用ISO-8859-1对其进行转换,但仍与UTF-8不同)。 – 2015-03-19 11:16:46
将十六进制转换为ASCII。当我将相同的ASCII值转换回十六进制时,它显示不同的值。 – soft009 2015-03-19 11:19:24