2015-03-19 115 views
0

我寫了兩種方法將十六進制字符串轉換爲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

回答

0

您試圖將一個十六進制字符串的兩個字符(如「FF」)表示爲一個單獨的char。這是行不通的。

您的「hexString」已經是您的十六進制數字的字符串表示形式。

+0

我需要兩個十六進制字符串作爲單個ASCII字符 62 - b 20 - 空間 等。 – soft009 2015-03-19 11:40:08