C中的小端到大端

时间:2012-10-06 09:52:29

标签: c

我有一个名为hex_values的unsigned int数组,其中包含数字。例如: 数组的大小是5,它包含这些nubmers:

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将不会显示零...有什么方法可以修复它吗?

THX任何帮助...

编辑:

好的,我现在有另一个问题...例如我有一个大小为5的数组,其中包含5个值,比如830C 830C 830C 830C 830C ...我有2个函数(第一个在我的第一篇文章中提到) 。第二个函数具有此定义

void show_big(unsigned int * pt, unsigned int numbers)

{     <br>unsigned int hex_b, hex_l;

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));
}

}
我用这个参数show_big(hex_values,numbers)来调用这个函数; // hex_values是具有5个数字和数字的数组的名称 只有一个数字表示数组有多少个值...问题是,如果数组包含的值多于1,则show_big函数不会正确显示大端的数字(0C83 0C83 ...)...我真的没有想法为什么...如果有必要我可以通过这里完整的代码... THX任何帮助。

2 个答案:

答案 0 :(得分:1)

尝试printf("%05X", x),其中x是转换后的数字。这指示printf将您的号码打印到至少5个位置,如果需要更少,则用零填充最左边的位置。

答案 1 :(得分:0)

您的问题与printf()有关,而不是您将小端数转换为大端数的方式。

printf()显示前导零,您应指定一个长度,并在长度之前加上0

printf("%04X", little_big(0x830C));

号码4告诉printf()它应该将您的号码输出右对齐到一个4个字符的长字段,0告诉printf()它应该填充带有字段的字段零,X是带有大写字母的十六进制输出的格式说明符。