【发布时间】:2017-08-27 09:50:30
【问题描述】:
我有一段代码从硬件寄存器中读取两个字节:
short MPU9250::combineRegisters(unsigned char msb, unsigned char lsb){
//shift the MSB left by 8 bits and OR with LSB
return ((short)msb<<8)|(short)lsb;
}
设备中的实际数据是大端格式,所以我读取两个字节并将它们组合起来以二进制补码形式得到实际值。但是,当我将数据输出到控制台时,例如:
cout << combineRegisters(registerA, registerB) << endl;
C++ 自动为我提供带有适当加号/减号的整数值。我没有说明我从设备得到的二进制值是二进制补码形式。
怎么样?这是否意味着 C++ 读取二进制值并假定它们是二进制补码格式?
【问题讨论】:
-
无前缀的short通常是签名的。
-
哎呀,你自己的用户名怎么拼错了...
-
仅供参考,您似乎误解了一些术语。 “Endian 格式” 没有意义。它可以是大端或小端,它(几乎)总是这两者之一。
-
@KerrekSB 是故意这样做的。哈哈..
-
@HolyBlackCat 感谢您指出这一点,是的,这是大端序。
标签: c++ binary type-conversion