2010-10-19 29 views
3

目標是獲得一個字節[16],其中第一個元素是十六進制值55,第二個元素是十六進制值AA。和其他14是十六進制值0需要設置一個字節[]

我試圖

byte[] outStream = System.Text.Encoding.UTF8.GetBytes("55 AA 00 00 00 00 00 00 00 00 00 00 00 00 00 00"); 

但這填充字節[]使用ASCII值,而不是十六進制值。

我試圖

byte[] outStream = new byte[16]; 
    outStream[0] = byte.Parse("55"); 
    outStream[1] = byte.Parse("AA"); 
    for(int i=2; i<16; i++) 
    { 
    outStream[i] = byte.Parse("00"); 
    } 

但這也不管用。它不會給出十六進制值,而是AA上崩潰的整數值,因爲它不是可分析的int。

任何幫助,將不勝感激。

+1

更正:您的第一條語句填充'的byte []'與** UTF-8 **值,而不是ASCII值,因爲你使用了UTF-8編碼。 – Aaronaught 2010-10-19 21:08:59

回答

2

您可以使用:byte.Parse(hex_byte_string, System.Globalization.NumberStyles.HexNumber);
或者你也可以使用:Convert.ToByte(hex_byte_string, 16);

public static byte[] ToByteArray(String HexString) 
{ 
    string hex_no_spaces = HexString.Replace(" ",""); 
    int NumberChars = hex_no_spaces.Length; 
    byte[] bytes = new byte[NumberChars/2]; 
    for (int i = 0; i < NumberChars; i+=2) 
    { 
     bytes[i/2] = byte.Parse(hex_no_spaces.Substring(i, 2), System.Globalization.NumberStyles.HexNumber); 
    } 
    return bytes; 
} 

而且使用這樣的:

byte[] bytez = ToByteArray("55 AA 00 00 00 00 00 00 00 00 00 00 00 00 00 00"); 
+0

這工作完美。謝謝。 – 2010-10-20 13:54:45

12

您可以通過在前面把它寫在C#中文字十六進制整數用0x:

byte[] result = new byte[16]; 
result[0] = 0x55; 
result[1] = 0xaa; 

默認情況下,字節數組填充0x00,因此您只需設置前兩個元素。

或者,你可以使用數組初始化器的語法:

byte[] result = new byte[] { 0x55, 0xaa, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; 
2
byte[] result = { 0x55, 0xaa, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; 
相關問題