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

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

我尝试了以下(package.FrameID是ushort):

当我尝试用纸和笔来计算时,我得到了正确的结果。 此外,如果FrameID大于一个字节(因此第二个字节不为零),它就可以工作。

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

在我的情况下,package.FrameID是56,array [0]中的结果是16而不是56。

我怎样才能解决这个问题?

0x0000000011111111不是二进制数,它是hex数。 你需要使用0x0ff

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

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

(假设您没有使用checked代码。如果是,那么将一个大于255的值转换为一个byte将导致exception。您将知道您是否使用了checked代码。)

使用BitConverter

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