2013-06-12 120 views
1

我正在实现C代码来将16位符号和幅度整数复制到8位符号和幅度整数。这甚至有可能吗?有人可以解释如何做到这一点?将16位整数转换为8位整数?

代码片段:

int16_t a = 0x1234; 
int8_t b, c; 

如何前两位复制到变量b和接下来的两个数字到变量c?

回答

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); 
+0

这将适合在那里的所有位,但我不会完全调用两个部分“符号和量级整数”。特别是下半部分只能被认为是无符号的。 – Thilo

+0

@Thilo你有什么建议呢? (我意识到这可能没有意义,但那是因为这个问题也不是很有意义。) – 2013-06-12 05:10:11

+0

并不意味着批评你的答案。只是对这个问题发表评论。没有其他方式将16位合并到2x8中。没有额外符号位的空间。 – Thilo