如果要用4个单字节字符变量来填充1个整型变量可以这样做:
int a=0;char b[4];for(j=0; j<4; j++){ a |= b[j]《(8*j);}
但这样做结果是不对的,因为b为char类型数组,为有符号数。而a为整型,因此b[j]首先会进行符号位扩展。
如果b[j]的高位为1,则在左移之前首先将高字节都扩展为ff。因此最终结果不正确。
将数组b定义为无符号字符数组即可:
int a;unsigned char b[4];for(j=0; j<4; j++){ a |= (b[j])《(8*j);}