在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。
我该怎么解决这个问题?
使用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
代码。)