Добавление значений в байтовый массив - PullRequest
1 голос
/ 28 мая 2010

Я начинаю с двух значений ниже:

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};

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

Ответы [ 4 ]

6 голосов
/ 28 мая 2010

Вам не нужно объединять префикс "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); 
}
4 голосов
/ 28 мая 2010

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

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

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

1 голос
/ 28 мая 2010

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

     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);
     }
1 голос
/ 28 мая 2010

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

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

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();
...