我正在实现C代码,将16位符号和幅度整数复制到8位符号和幅度整数。这甚至可能吗?有人可以解释一下如何做到这一点吗?
代码段:
int16_t a = 0x1234;
int8_t b, c;
如何将前两位数字复制到变量b,将下两位数字复制到变量c?
答案 0 :(得分:3)
您可以使用该语言的按位运算符:您需要将数字8和0位向右移动以分别获得第一个和第二个数字(并且您还应该用255屏蔽它们,这样恰好一个字节是提取的):
int16_t i = 0x1234;
uint16_t n = i; // because shifting the sign bit invokes UB
int8_t hi = ((i >> 8) & 0xff);
int8_t lo = ((i >> 0) & 0xff);