6

如何在 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。

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

4

2 回答 2

18

使用位转换器

var bytes = BitConverter.GetBytes(package.FrameID);
于 2013-09-03T08:39:42.280 回答
10

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

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

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

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

于 2013-09-03T08:45:17.370 回答