Как конвертировать 3 байта в 24-битное число в C #? - PullRequest
4 голосов
/ 27 июля 2010

У меня есть массив байтов, которые я читаю из раздела заголовка сообщения.Эти байты содержат длину сообщения.Никогда не бывает больше 3 байтов, и они упорядочены от LSB до MSB.Таким образом, в приведенном ниже примере 39 - это младший бит, а 2 - это младший бит.

var data = new byte[] { 39, 213, 2 };

В примере выше, как я могу взять эти байты и преобразовать их в число (int, short и т. Д.)?

Ответы [ 5 ]

13 голосов
/ 27 июля 2010
var num = data[0] + (data[1] << 8) + (data[2] << 16);
9 голосов
/ 27 июля 2010

Используйте такие методы, как BitConverter.ToInt32 , но понимайте, что для 32-битных величин вам потребуется 4 байта.

var data = new byte[] {39, 213, 2, 0};
int integer = BitConverter.ToInt32(data, 0);

Существуют также другие методы для преобразования в и из других типов, например Одиночный и Двойной .

5 голосов
/ 27 июля 2010

Используйте оператор Left-shift и оператор or:

int d = (data[2] << 16) | (data[1] << 8) | data[0]

Очевидно, что здесь вы можете делать все что угодно, например, использовать цикл и т. Д.)

1 голос
/ 27 июля 2010

Что-то вроде этого должно работать:

data[0] + 256*data[1] + 256*256*data[2]

Ваш компилятор должен оптимизировать это до «правильных» операций переворота.

0 голосов
/ 27 июля 2010

BitConverter обрабатывает для вас порядок байтов, поэтому это путь.

Пока вам нужно 4 байта, выполните

BitConverter.ToInt32(new byte[1] { 0 }.Concat(yourThreeByteArray).ToArray());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...