C #, Как разбить массив байтов по разделителю? - PullRequest
3 голосов
/ 25 февраля 2012

У меня есть байтовый массив, который содержит набор из 2-х байтовых шестнадцатеричных чисел, разделенных ','. Как это можно разделить на ',', а затем числа будут преобразованы в целые числа?

Массив байтов содержит значения в формате ascii.

редактировать: Пример

Мой действительный диапазон символов от 0 до 9, от A до F и запятая поэтому мой поток должен выглядеть как

70, 67, 65, 57, 44, 55, 68, 66, 53, 44 ....

это будет эквивалентно шестнадцатеричному

FCA9 и 7DB5

Ответы [ 3 ]

6 голосов
/ 25 февраля 2012

Если ваш байтовый массив действительно закодирован в ASCII (ОДИН байт на символ), то будет работать следующее:

int[] ints = Encoding.ASCII.GetString(asciiEncodedBytes).Split(',')
             .Select(x => Convert.ToInt32(x,16)).ToArray();

Это также будет обрабатывать шестнадцатеричные числа со смешанным регистром и переменной длины.

2 голосов
/ 25 февраля 2012

Я бы преобразовал байтовый массив в строку, а затем использовал бы String.Split (',')

1 голос
/ 25 февраля 2012

Это должно работать, хотя мой C # немного ржавый ...

byte[]    input = { 1, 0, 0, 0, ',', 10, 15, ',', 100, 0, 0, 0, ',' };
List<int> output = new List<int>();

int lastIndex = 0;

for (int i = 0; i < input.Length; i ++) {
    if (input[i] == ',')
    {
         if (i - lastIndex == 4)
         {
             byte[] tmp = { input[i - 4], input[i - 3], input[i - 2], input[i - 1] };
             output.Add(BitConverter.ToInt32(tmp, 0));
         }

         lastIndex = i + 1;
    }
}
...