hamid18 Ответов: 2

Преобразование 8 бит в 16 бит байт


i have a byte array.. Each index is having values like 0x01, 0x1D etc.. It can be seen that these values are 8 bit numbers. I want to convert them to 16 bit numbers.  for example, I want this type of result 0x0001 0x001D.  Is there some way to do this in C#?


Что я уже пробовал:

Будет использоваться класс BitConverter. я хочу получить номера без знака. я не уверен, какой метод будет использоваться в классе BitConverter.

2 Ответов

Рейтинг:
5

Richard MacCutchan

То Класс BitConverter (Система)[^] похоже, у него нет способа сделать это для вас. Вам нужно будет написать свой собственный.


hamid18

спасибо.

Рейтинг:
18

Jochen Arndt

Как уже отмечалось в решении 1, существующего метода не существует.

Но довольно просто объявить массив ushort с тем же количеством элементов, что и в байтовом массиве, и скопируйте данные внутри цикла:

ushort[] arr16 = new ushort[arr8.Length];
for (int i = 0; i < arr8.Length; i++)
{
    arr16[i] = arr8[i];
}


hamid18

спасибо. это сработало для меня

Richard Deeming

Вы можете немного упростить это, используя Массив.ConvertAll[^]

ushort[] arr16 = Array.ConvertAll(arr8, b => (ushort)b);

Однако для очень больших массивов влияние на производительность вызова делегата для каждого элемента может стать проблемой.

Jochen Arndt

Спасибо, что поделились этим. Не искали процедуры преобразования массива.

[РЕДАКТИРОВАТЬ]
Не кажется ли вам, что такой простой делегат встроен, что приводит к аналогичному - если не идентичному - сгенерированному коду, как и мое решение?
[/РЕДАКТИРОВАТЬ]

Jochen Arndt

Еще раз спасибо за информацию.

Я слишком много думал в направлении C++, где лямбды могут быть встроены компилятором.

hamid18

спасибо :)