Преобразовать значение ushort в двухбайтовые значения в C#

Как разделить ushort на две байтовые переменные в C#?

Я попробовал следующее (package.FrameID это ushort):

Когда я пытаюсь рассчитать это с бумагой и карандашом, я получаю правильный результат. Кроме того, если FrameID больше байта (поэтому второй байт не равен нулю), это работает.

array[0] = (byte)(0x0000000011111111 & package.FrameID);
array[1] = (byte)(package.FrameID >> 8);

В моем случае package.FrameID равен 56, а результат в массиве [0] равен 16 вместо 56.

Как я могу это исправить?

2 ответа

Решение

0x0000000011111111 это не двоичное число, это шестнадцатеричное число. Вам нужно использовать 0x0ff вместо.

Однако, поскольку в результате получается байт, а приведение к байту в любом случае отбрасывает старшие биты, вам на самом деле не нужно and результат. Вы можете просто сделать это:

array[0] = (byte)package.FrameID;
array[1] = (byte)(package.FrameID >> 8);

(Это при условии, что вы не используете checked код. Если да, то приведение значения больше 255 к byte вызовет исключение. Вы будете знать, если вы используете checked код.)

Используйте BitConverter

var bytes = BitConverter.GetBytes(package.FrameID);
Другие вопросы по тегам