如何在C#中将一个ushort拆分为两个字节的变量?
我尝试了以下方法(package.FrameID是ushort):
当我试着用纸和铅笔计算它时,我得到了正确的结果。此外,如果FrameID大于一个字节(因此第二个字节不是零),它就可以工作。
array[0] = (byte)(0x0000000011111111 & package.FrameID);
array[1] = (byte)(package.FrameID >> 8);
在我的例子中,package.FrameID是56,数组中的结果是16而不是56。
我该如何解决这个问题呢?
发布于 2013-09-03 16:45:17
0x0000000011111111
不是二进制数,而是十六进制数。您需要改用0x0ff
。
但是,由于结果是一个字节,而且强制转换为一个字节无论如何都会丢弃高位,所以实际上不需要对结果执行and
。你可以这样做:
array[0] = (byte)package.FrameID;
array[1] = (byte)(package.FrameID >> 8);
(这是假设您没有使用checked
代码。如果是,则将大于255的值强制转换为byte
将导致异常。您将知道您是否正在使用checked
代码。)
发布于 2013-09-03 16:39:42
var bytes = BitConverter.GetBytes(package.FrameID);
https://stackoverflow.com/questions/18587611
复制相似问题