Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将两个字节转换为12位短值?_C++_Casting - Fatal编程技术网

C++ 将两个字节转换为12位短值?

C++ 将两个字节转换为12位短值?,c++,casting,C++,Casting,我有一个缓冲区,它由无符号字符中的数据和两个字节组成,形成一个12位的值 我发现我的系统是little endian。缓冲区中的第一个字节给出了控制台上从0到255的数字。第二个字节总是给出1到8之间的低数值(测量数据,因此也可能有高达4位的高数值) 我试着把它们移到一起,这样我就得到了一个有正确12位数字的ushort 可悲的是,目前我完全搞不清楚这种持久性,以及我必须朝哪个方向改变多远 我试过,例如: ushort value =0; value= (ushort) firstByte &l

我有一个缓冲区,它由无符号字符中的数据和两个字节组成,形成一个12位的值

我发现我的系统是little endian。缓冲区中的第一个字节给出了控制台上从0到255的数字。第二个字节总是给出1到8之间的低数值(测量数据,因此也可能有高达4位的高数值)

我试着把它们移到一起,这样我就得到了一个有正确12位数字的ushort

可悲的是,目前我完全搞不清楚这种持久性,以及我必须朝哪个方向改变多远

我试过,例如:

ushort value =0;
value= (ushort) firstByte << 8 | (ushort) secondByte << 4;
ushort值=0;

value=(ushort)firstByte这取决于位在两个字节内的压缩方式,但最有可能的压缩解决方案是:

value = firstByte | (secondByte << 8);

这取决于位在两个字节内的确切打包方式,但最可能的打包解决方案是:

value = firstByte | (secondByte << 8);

我认为主要的问题可能不是你正在改变的价值观。如果这些值大于它们的代表位,则它们将创建一个较大的值,除非“and'd”输出

想象一下

0000 0000 1001 0010 << 8 | 0000 0000 0000 1101 << 4
1001 0010 0000 0000 | 0000 0000 1101 0000
在这里,您应该注意该值仍然大于12位。如果您的数字没有扩展到原来的8位,则忽略4位大小。否则,必须对位使用“and”操作以消除最左边的4位

0000 1111 1111 1111 & 0000 1001 0010 1101

这些值可以使用0bXX宏、2^bits-1模式以及各种其他形式创建。

我认为主要的问题可能不是您单独移动的值。如果这些值大于它们的代表位,则它们将创建一个较大的值,除非“and'd”输出

想象一下

0000 0000 1001 0010 << 8 | 0000 0000 0000 1101 << 4
1001 0010 0000 0000 | 0000 0000 1101 0000
在这里,您应该注意该值仍然大于12位。如果您的数字没有扩展到原来的8位,则忽略4位大小。否则,必须对位使用“and”操作以消除最左边的4位

0000 1111 1111 1111 & 0000 1001 0010 1101

这些值可以使用0bXX宏、2^bits-1模式以及各种其他形式创建。

谢谢您的建议。在控制台上,这提供了例如以下(十进制值):第一个字节=212,第二个字节=1,值=65942或第一个字节=7,下一个字节=2,值=519。知道发生了什么吗?Thxy您的字节没有使用签名类型,是吗?如果是这样,则将其更改为unsigned,否则需要在上述解决方案中添加一些掩蔽(请参见更新的答案)。问题是数据是二进制的unsigned,但存储为char。因此,重新解释演员阵容解决了问题。谢谢谢谢你的建议。在控制台上,这提供了例如以下(十进制值):第一个字节=212,第二个字节=1,值=65942或第一个字节=7,下一个字节=2,值=519。知道发生了什么吗?Thxy您的字节没有使用签名类型,是吗?如果是这样,则将其更改为unsigned,否则需要在上述解决方案中添加一些掩蔽(请参见更新的答案)。问题是数据是二进制的unsigned,但存储为char。因此,重新解释演员阵容解决了问题。谢谢
firstByte,secondByte
的编码类型是什么?
firstByte,secondByte
的编码类型是什么?