2015-03-19 3 views
0

Я написал два метода для преобразования Hex-строки в ASCII и ASCII-строку в шестнадцатеричную строку. Но когда я сравниваю две строки, я получаю две разностные шестнадцатеричные строки.Hex-строка для преобразования ASCII и преобразования ASCII в Hex

Например: шестнадцатеричная строка = 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(); 
} 

Но в качестве последней шестнадцатеричной строки я получаю ниже строки.

Hex строка = 6220000008c2a01000

Может кто-нибудь помочь мне, чтобы понять это, что случилось там?

+1

Вы преобразовываете в шестнадцатеричную кодированную строку UTF8. Вы переходите к байту чтения строки _plain_ by by byte, предполагая, что поток ... ASCII. Это не. Некоторые символы в строке UTF8 могут содержать более одного байта. –

+1

Действительно, любые двоичные данные с 0xa0 in являются * not * ASCII ... (Фактически вы на самом деле конвертируете его с использованием ISO-8859-1, который все еще не совпадает с UTF-8.) –

+0

Сначала я конвертировать hex в ASCII. Когда я конвертирую одно и то же значение ASCII обратно в шестнадцатеричное, оно показывает разные значения. – soft009

ответ

0

Вы пытаетесь представить два символа шестнадцатеричной строки (например, «FF») как один char. Это не работает.

Ваш «hexString» уже является строковым представлением вашего шестнадцатеричного номера.

+0

Мне нужны два символа шестнадцатеричной строки в виде одного символа ASCII 62 - b 20 - space и т. Д. – soft009

Смежные вопросы