C中的小端到大端
我有一个称为十六进制值的无符号整数数组,它包含数字。例如: 数组的大小为5,其中包含以下数值:C中的小端到大端,c,C,我有一个称为十六进制值的无符号整数数组,它包含数字。例如: 数组的大小为5,其中包含以下数值: 830C 830C 830C 830C 830C 我需要做的是将它们显示为大端值: 0C83 0C83 0C83 0C83 0C83 对于将830C转换为0C83我使用了以下功能: unsigned int little_big(unsigned int little) { return((little&0xff)<<24)+((little&0xff00)&l
830C 830C 830C 830C 830C
我需要做的是将它们显示为大端值:
0C83 0C83 0C83 0C83 0C83
对于将830C
转换为0C83
我使用了以下功能:
unsigned int little_big(unsigned int little)
{
return((little&0xff)<<24)+((little&0xff00)<<8)+((little&0xff0000)>>8)+ \
((little>>24)&0xff);
}
{
无符号整数十六进制,十六进制;
printf("\n");
for (unsigned int i = 0; i < numbers; i++)
{
hex_l = *(pt + i);
hex_b = little_big(hex_l);
printf("%04X", (hex_b >> BITS));
}
printf(“\n”);
for(无符号整数i=0;i>位);
}
}
我调用这个函数时使用这个参数show_big(十六进制值,数字); //十六进制_值是包含5个数字的数组的名称,数字为
只有一个数字表示数组中有多少个值。。。问题是,如果数组包含的值多于1,则show_big函数无法正确地以大端显示这些数字(0C83 0C83…)。。。我真的不知道为什么。。。如果有必要,我可以在这里通过完整的代码。。。谢谢你的帮助 试试
printf(“%05X”,x)
,其中x
是转换后的数字。这指示printf将您的数字打印到至少5个位置,如果需要更少的时间,则将最左边的数字填充为零。您的问题与printf()
有关,而不是与将小端数字转换为大端数字的方式有关
要使printf()
显示前导零,应指定一个长度,并在长度前面加上0
:
printf("%04X", little_big(0x830C));
数字
4
告诉printf()
它应该将数字右对齐输出到一个4个字符长的字段中,0
告诉printf()
它应该用前导零填充字段,X
是十六进制输出的大写字母格式说明符。可能重复@axis no,具有讽刺意味的是,这个问题与endianness无关。看起来这实际上是关于打印前导零的问题。@Martin我在编辑之前发布了这篇文章,等待作者更清楚的解释……我建议用尽可能简单的程序重现这个问题,将该程序的完整源代码发布到一个新问题上,并接受Ivan对原始问题的回答。人们不喜欢用移动的门柱回答问题。
printf("%04X", little_big(0x830C));