在C#中将ushort值转换为两个字节的值

本文关键字:两个 字节 中将 ushort 转换 | 更新日期: 2023-09-27 18:29:55

如何在C#中将ushort拆分为两个字节的变量?

我尝试了以下操作(package.FrameID为ushort):

当我试图用纸来计算这一点时&铅笔我得到了正确的结果。此外,如果FrameID大于一个字节(因此第二个字节不是零),它也可以工作。

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

在我的包裹里。FrameID为56,数组[0]中的结果为16而不是56。

我该怎么解决这个问题?

在C#中将ushort值转换为两个字节的值

使用BitConverter

var bytes = BitConverter.GetBytes(package.FrameID);

0x0000000011111111不是二进制数,而是十六进制数。您需要使用0x0ff

然而,由于结果是一个字节,并且强制转换为字节无论如何都会丢弃高位,因此实际上不需要and结果。你可以这样做:

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

(这是假设您没有使用checked代码。如果使用,则将大于255的值强制转换为byte将导致异常。您将知道您是否使用checked代码。)