2011-10-24 176 views
8

可能重複:
How do you convert Byte Array to Hexadecimal String, and vice versa, in C#?
Convert hex string to byte array字符串字節數組

我像這樣的字符串: 「021500010000146DE6D800000000000000003801030E9738」

我需要的是以下字節數組: 02 15 00 01 00 00 14 6D E6 D 8 00 00 00 00 00 00 00 00 38 01 03 0E 97 38(每對數字是相應字節中的十六進制值)。

有關如何進行此轉換的任何想法?謝謝!!

+0

你寫的做一些事情? –

+1

「可能的重複」是完全不同的問題。他沒有問如何使用某種編碼將字符串編碼到「byte []」中。這裏的字符串包含應該轉換爲byte []的十六進制值。 – svick

+0

我不明白這些問題是如何重複的。 – vcsjones

回答

5
var arr = new byte[s.Length/2]; 
for (var i = 0 ; i<arr.Length ; i++) 
    arr[i] = (byte)Convert.ToInt32(s.SubString(i*2,2), 16); 
+0

此代碼確實運行良好。但只有一個細節,正確的代碼是「s.Substring」。 感謝所有。 – Manu

+0

可以使用Convert.ToByte而不是ToInt32。 – mikeazo

1

你幾乎想要這個page的第二個例子。
重要的部分是:

Convert.ToInt32(hex, 16); 

第一個參數是一個2字符的串,指定一個十六進制值(例如"DE")。
第二個參數指定從十六進制的Base-16轉換。

將字符串拆分爲兩個字符的段在示例中未顯示,但對於您的問題是必需的。我相信它很簡單,可以讓你處理。

我發現這與Google: "C# parse hex"

1
string str = "021500010000146DE6D800000000000000003801030E9738"; 
    List<byte> myBytes = new List<byte>(); 

    try 
    { 
     while (!string.IsNullOrEmpty(str)) 
     { 
      myBytes.Add(Convert.ToByte(str.Substring(0, 2), 16)); 
      str = str.Substring(2); 
     } 
    } 
    catch (FormatException fe) 
    { 
     //handle error 
    } 
    for(int i = 0; i < myBytes.Count; i++) 
    { 
     Response.Write(myBytes[i].ToString() + "<br/>"); 
    } 
+0

'Convert.ToByte' on一個'int'?我的意思是,過早優化是不好的,但所有的,但最簡單的方法也更快... –

+0

@BenVoigt啊,我發現正確的功能在一個轉換。謝謝! –