我遇到了一个简单的问题。这是代码:
int main(int argc, char **argv)
{
char buf[2] = {0xd, 0x1f};
unsigned int a;
a = ((buf[1] << 8) & 0xFF00) | buf[0];
printf("%d\n",a);
return 0;
}
我需要的a
中的值为0x1FD(509)
但是当我运行上述程序时,a
中的输出为0x1F0D(7949)
。
我怎样才能做到这一点?
编辑:
好的,让我澄清一下。我正在做一个项目,我收到代码片段中显示的数据。为了简化我已将它们声明为本地。主要的是我希望数据被解释为0x1FD(509)
。
答案 0 :(得分:6)
该程序执行您要求它执行的操作。混淆的来源是0xd
常量,实际上是0x0d
,因为char
是8位。与0x1f
一起打包时应该生成0x1f0d
,而且确实如此。
答案 1 :(得分:3)
你需要
char buf[2] = {0xfd, 0x01};
也就是说,你需要&#34;打包&#34;从右到左的位。
如果用零填充所需的值,则更清楚,因此它被写为完整字节的字符串:
0x1FD
= 0x01FD
= (0x01 << 8) | 0xFD
答案 2 :(得分:2)
char是8位,因此它由两个十六进制数字表示。
如果您想在变量0x1FD
中使用a
,则应使用0xfd
和0x01
初始化数组。
答案 3 :(得分:-1)
您需要删除空位:
unsigned pack(char bytes[2])
{
char shift = 8;
if (bytes[0] < 32)
shift = 4;
return (unsigned) ((bytes[1] << shift) | bytes[0]);
}