C 将字符转换为长字符时出错

C 将字符转换为长字符时出错,c,C,获得的产出: 1 2 3 4 最终值=0x05020304 预期产出: 1 2 3 4 最终值=0x01020304 当使用a、b、c、d的不同输入执行上述代码时,在上述示例0x1中,以MSB为单位获得的最终值的输出为:0xa | dbcd,或使用0x4,以获得0x5 为什么MSB字节要与LSB字节进行OR运算 首先将FinalValue初始化为0,未初始化的局部自动变量包含垃圾 更改printfinalValue=%ldFinalValue;要打印fFinalValue=%ld,FinalVa

获得的产出: 1 2 3 4 最终值=0x05020304

预期产出: 1 2 3 4 最终值=0x01020304

当使用a、b、c、d的不同输入执行上述代码时,在上述示例0x1中,以MSB为单位获得的最终值的输出为:0xa | dbcd,或使用0x4,以获得0x5

为什么MSB字节要与LSB字节进行OR运算

首先将FinalValue初始化为0,未初始化的局部自动变量包含垃圾

更改printfinalValue=%ldFinalValue;要打印fFinalValue=%ld,FinalValue,添加逗号

什么是Printf?你可能是指printf

你想要十六进制的输出吗?使用%lx。printfinalValue=%lx,最终值

使FinalValue无符号,然后移位。有符号数字的有符号位的移位取决于实现

更新:增加第5点

首先将FinalValue初始化为0,未初始化的局部自动变量包含垃圾

更改printfinalValue=%ldFinalValue;要打印fFinalValue=%ld,FinalValue,添加逗号

什么是Printf?你可能是指printf

你想要十六进制的输出吗?使用%lx。printfinalValue=%lx,最终值

使FinalValue无符号,然后移位。有符号数字的有符号位的移位取决于实现


更新:添加第5点

也将%ld更改为%lx。如果OP不希望在单个数字之间使用逗号,则打印格式也应省略逗号。如果“4”和“FinalValue”之间有空格,那么这需要包含在两种打印格式中的一种中。@phoxis:谢谢..我已经做了你建议的所有事情,但问题仍然存在。@hemanth:你能发布你正在编译的实际代码吗?当FinalValue初始化为0时,我无法重新生成问题。long int FinalValue;作为全局变量,只在主函数中初始化一次为零,而不是在局部函数中。因此,在第一次交互中未检测到此问题,但在随后的迭代中出现了问题,因为LSB字节包含上一次迭代中的变量d。@phoxis感谢将%ld更改为%lx。如果OP不希望在单个数字之间使用逗号,则打印格式也应省略逗号。如果“4”和“FinalValue”之间有空格,那么这需要包含在两种打印格式中的一种中。@phoxis:谢谢..我已经做了你建议的所有事情,但问题仍然存在。@hemanth:你能发布你正在编译的实际代码吗?当FinalValue初始化为0时,我无法重新生成问题。long int FinalValue;作为全局变量,只在主函数中初始化一次为零,而不是在局部函数中。因此,在第一次交互中未检测到此问题,但在随后的迭代中出现了此问题,因为LSB字节包含上一次迭代中的变量d。@phoxis非常感谢。请发布您的实际代码。复制粘贴;不要重新键入。请发布您的实际代码。复制粘贴;别再打了。
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);