2010-05-28 4 views
1

Я, начиная с двух значений ниже:Добавление значений в массив байт

finalString = "38,05,e1,5f,aa,5f,aa,d0"; 
string[] holder = finalString.Split(','); 

Я сквозными через держатель, как так:

foreach (string item in holder) 
{ 
    //concatenate 0x and add the value to a byte array 
} 

На каждой итерации я хотел бы сцепить 0x, чтобы сделать его шестнадцатеричным значением и добавить его в массив байтов.

Это то, что я хочу, массив будет, когда я закончу цикл:

byte[] c = new byte[]{0x38,0x05,0xe1,0x5f,0xaa,0x5f,0xaa,0xd0}; 

До сих пор все мои попытки не увенчались успехом. Может ли кто-нибудь указать мне в правильном направлении?

ответ

6

Вам не нужно сцепить префикс " 0x». Этот префикс используется C# компилятор при разборе литералов, но byte.Parse не использует его

byte[] myByteArray = new byte[holder.Length]; 
int i = 0; 
foreach (string item in holder) 
{ 
    myByteArray[i++] = byte.Parse(item, System.Globalization.NumberStyles.AllowHexSpecifier); 
} 
1

просто создайте новый массив байтов, размер которого составляет оба массива. Затем вставьте один и вставьте второй в новый буфер. размеры массива в .net не являются изменяемыми

другой подход был бы использовать что-то вроде списка, а затем только через петлю каждого массива и добавить его

var buffer = new List<byte>(); 
foreach(var b in firstArray) buffer.Add(b); 
foreach(var b2 in secondArray) buffer.Add(b2); 

byte[] newArray = buffer.ToArray(); 
4

Вы можете сделать это как однострочник:

var c = holder.Select(s => byte.Parse(s, NumberStyles.AllowHexSpecifier)).ToArray(); 

c теперь байтовый массив с данные, которые вам нужны.

+1

крутой идея, но редактировать свой пост, так что байты обрабатываются в шестнадцатеричном режиме. –

+0

s представляет значение в шестнадцатеричном формате. Он может содержать буквы от A до F. byte.Parse нужен второй аргумент, определяющий формат. –

1

Это будет генерировать список значений байт на основе разделенных запятых шестнадцатеричных значений Вы имеете:

 string hex_numbers = "38,05,e1,5f,aa,5f,aa,d0"; 
    string[] hex_values = hex_numbers.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 
    byte[] byte_array = new byte[hex_values.Length]; 
    for(int i = 0; i < hex_values.Length; i++) 
    { 
     byte_array[i] = byte.Parse(hex_values[i], System.Globalization.NumberStyles.AllowHexSpecifier); 
    } 
Смежные вопросы