如何在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。
我该如何解决这个问题?
答案 0 :(得分:10)
var bytes = BitConverter.GetBytes(package.FrameID);
答案 1 :(得分:5)
0x0000000011111111
不是二进制数,它是十六进制数。您需要改为使用0x0ff
。
但是,由于结果是一个字节,并且转换为一个字节无论如何都会丢弃高位,实际上你不需要and
结果。你可以这样做:
array[0] = (byte)package.FrameID;
array[1] = (byte)(package.FrameID >> 8);
(假设您没有使用checked
代码。如果是,那么将大于255的值转换为byte
将导致异常。您将知道您是否正在使用{{ 1}}代码。)