use*_*938 1 c# byte boolean-logic ushort
如何在C#中将ushort分成两个字节变量?
我尝试了以下(package.FrameID是ushort):
当我尝试用纸和笔来计算时,我得到了正确的结果.此外,如果FrameID大于一个字节(因此第二个字节不为零),它就可以工作.
array[0] = (byte)(0x0000000011111111 & package.FrameID);
array[1] = (byte)(package.FrameID >> 8);
Run Code Online (Sandbox Code Playgroud)
在我的情况下,package.FrameID是56,array [0]中的结果是16而不是56.
我怎样才能解决这个问题?
EZI*_*EZI 11
var bytes = BitConverter.GetBytes(package.FrameID);
Run Code Online (Sandbox Code Playgroud)
0x0000000011111111不是二进制数,它是十六进制数.你需要0x0ff改用.
但是,由于结果是一个字节,并且转换为字节将丢弃高位,无论如何您实际上不需要and结果.你可以这样做:
array[0] = (byte)package.FrameID;
array[1] = (byte)(package.FrameID >> 8);
Run Code Online (Sandbox Code Playgroud)
(假设您没有使用checked代码.如果是,那么将大于255的值转换为a byte将导致异常.您将知道您是否使用checked代码.)