Преобразовать значение 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);