十六进制字符串到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

谁能帮我弄明白在那里发生什么事?

+1

您正在转换为十六进制UTF8编码的字符串。您将转换回_plain_字符串逐字节读取,假设流为... ASCII。不是。 UTF8字符串中的某些字符可能不止一个字节。 – 2015-03-19 11:15:56

+1

事实上,任何带有0xa0的二进制数据都是* not * ASCII ...(实际上,您现在正在使用ISO-8859-1对其进行转换,但仍与UTF-8不同)。 – 2015-03-19 11:16:46

+0

将十六进制转换为ASCII。当我将相同的ASCII值转换回十六进制时,它显示不同的值。 – soft009 2015-03-19 11:19:24

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

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

+0

我需要两个十六进制字符串作为单个ASCII字符 62 - b 20 - 空间 等。 – soft009 2015-03-19 11:40:08