我正在开发一个嵌入式平台(ARM)并且在处理位模式时必须小心谨慎。假设这一行代码超出了我的控制范围:
uint8_t foo = 0xCE; // 0b11001110
将其解释为无符号数,这将是206。但实际上它是有符号的,类似于-50。我如何继续使用该值作为有符号数?
int8_t bar = foo; // doesn't work
也不这样做(导致所有输入值产生0x10或0x00)
int8_t bar = static_cast<int8_t>(foo);
int8_t bar = reinterpret_cast<int8_t&>(foo);
我希望比特位不受影响,即(bar == 0xCE)
。
反之,我想知道如何将表示负数的位模式传递到无符号变量中,而不会破坏位模式。我正在使用GCC。