Как добавить 3 байта и вернуть целое число?

Предположим, что у меня есть шестнадцатеричная строка

00 00 04 01 11 00 08 00 06 C2 C1 BC

При этом 7-й, 8-й и 9-й октеты - это число, которое мне нужно сгенерировать. Гекс это

00 06 C2

Это число оказывается 1730, Со следующим, как я могу упростить это?

byte b1 = 0x00;
byte b2 = 0x06;
byte b3 = 0xC2;

Console.WriteLine(Convert.ToInt32((Convert.ToString(b1, 16)) + (Convert.ToString(b2, 16)) + (Convert.ToString(b3, 16)), 16));

Я знаю, что должен быть более простой способ. Я старался Console.WriteLine((b1 + b2 + b3).ToString()); но это не работает

3 ответа

Решение

Пытаться:

int result = b3 | (b2 << 8) | (b1 << 16);

Предполагая, что b1, b2 и b3 являются byte значения, которые вам нужно конвертировать.

<< Оператор сдвигает свой операнд влево на указанное количество бит.

Вы можете использовать BitConverter класс для преобразования массива байтов в int.

// Add the bytes to an array, starting with b3, then b2, b1 and 0 to
// make it 4 bytes in total.
byte[] b = new byte[] { 0xC2, 0x06, 0x00, 0x00 };
int i = BitConverter.ToInt32(b, 0);

i теперь будет иметь значение 1730,

Вы можете попробовать это:

    byte b1 = (byte)0x00;
    byte b2 = (byte)0x06;
    byte b3 = (byte)0xC2;
    int i = ((b1 & 0xFF) << 16) | ((b2 & 0xFF) << 8) | (b3 & 0xFF);

РЕДАКТИРОВАТЬ:

    byte b1 = (byte)0x00;
    byte b2 = (byte)0x06;
    byte b3 = (byte)0xC2;
    int i = (b1 << 16) | (b2 << 8) | b3;
Другие вопросы по тегам