将2字节的char数组转换为int

时间:2016-08-03 06:15:05

标签: c

我对如何使这段代码工作感到困惑:

#include <stdio.h>

int main()
{
    unsigned char xx[]={1,3};

    int xxx=*((int*)xx);
    printf("val is %d\r\n",xxx);
}

代码是打印13还是31?当我尝试它时,它打印出一个很大的数字,而不是我所期待的。

2 个答案:

答案 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号变为0x00000301769

在大端机器(Power PC或某些微控制器)上,首先存储MSbyte。因此xxx变为0x0103000016973824