将char转换为long时出错

时间:2011-09-07 05:24:34

标签: c

long int FinalValue;
char a,b,c,d;

a=0x1;
b=0x2;
c=0x3;
d=0x4;

FinalValue |=  (long)a;
FinalValue <<= 0x8;
FinalValue |=  (long)b;
FinalValue <<= 0x8;
FinalValue |=  (long)c;
FinalValue <<= 0x8;
FinalValue |=  (long)d;


Printf("%d, %d, %d, %d", a,b,c,d);
Printf("FinalValue = %ld"FinalValue);

获得的输出: 1 2 3 4 FinalValue = 0x05020304

预期输出 1 2 3 4 FinalValue = 0x01020304

当使用不同的输入(对于a,b,c,d)执行上述代码时,在MSB中获得的最终值的输出为:0x(a | d)bcd(在上面的示例中为0x1或者为0x4,获得0x5)

为什么MSB字节与LSB字节进行“或”运算?

1 个答案:

答案 0 :(得分:5)

  1. 首先将FinalValue初始化为0,未初始化的本地(自动)变量包含垃圾。

  2. Printf("FinalValue = %ld"FinalValue);更改为printf("FinalValue = %ld", FinalValue);,添加逗号。

  3. 什么是Printf?你可能意味着printf

  4. 您想要以十六进制输出吗?使用%lxprintf("FinalValue = %lx", FinalValue);

  5. FinalValue无符号然后转移。有符号数的有符号位的移位取决于实现。

  6. 更新:添加第5点