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

时间:2013-09-03 08:36:20

标签: c# byte boolean-logic 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。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:10)

使用BitConverter

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}}代码。)