我有一个缓冲区,由unsigned char中的数据组成,两个字节组成一个12位值.
我发现我的系统是小端.缓冲区中的第一个字节为我提供了从0到255的控制台编号.第二个字节总是给出1到8之间的低数字(测量数据,因此也可以使用高达4位的值).
我试图将它们组合在一起,以便得到一个正确的12位数的ushort.
可悲的是,此刻我对于endianess和我必须改变的方向感到十分困惑.
我试过这样的:
ushort value =0;
value= (ushort) firstByte << 8 | (ushort) secondByte << 4;
Run Code Online (Sandbox Code Playgroud)
可悲的是,价值通常大于12位.
哪里出错了?
它取决于两个字节中的位如何精确打包,但最可能包装的解决方案是:
value = firstByte | (secondByte << 8);
Run Code Online (Sandbox Code Playgroud)
这假设第二个字节包含4个最高有效位(位8..11),而第一个字节包含8个最低有效位(位0..7).
firstByte
并且secondByte
是明智的无符号类型(例如uint8_t
).如果它们不是(例如,如果您使用过char
或其他可能签名的类型),那么您将需要添加一些屏蔽:
value = (firstByte & 0xff) | ((secondByte & 0xf) << 8);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
104 次 |
最近记录: |