我对如何使这段代码工作感到困惑:
#include <stdio.h>
int main()
{
unsigned char xx[]={1,3};
int xxx=*((int*)xx);
printf("val is %d\r\n",xxx);
}
代码是打印13还是31?当我尝试它时,它打印出一个很大的数字,而不是我所期待的。
答案 0 :(得分:3)
我不确定你的目标是什么,但你可能想要使用像
这样的东西int main()
{
unsigned char xx[]= "13";
printf("val is %s\r\n",xx);
}
或
int main()
{
unsigned char xx[]={1,3};
int xxx = xx[0] * 10 + xx[1];
printf("val is %d\r\n",xxx);
}
答案 1 :(得分:1)
发生的事情是sizeof(int)
为4. int xxx
填充了2个字节,但其他两个字节是随机的。这就是为什么你得到一个大数字。
如果您将其更改为
unsigned char xx[]={1,3,0,0};
然后,在小端机器上,您将获得“769&#39;
的输出这是因为在一个小端系统中,LSByte首先存储(0x01)然后存储下一个最高有效字节(0x02),然后存储其他字节(0x00,0x00)
xxx
号变为0x00000301
或769
在大端机器(Power PC或某些微控制器)上,首先存储MSbyte。因此xxx
变为0x01030000
或16973824