Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中的小端到大端_C - Fatal编程技术网

C中的小端到大端

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

我有一个称为十六进制值的无符号整数数组,它包含数字。例如: 数组的大小为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)<<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));