我有一个名为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将不会显示零...有什么方法可以修复它吗?
编辑:
好的,我现在有另一个问题...例如我有一个大小为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任何帮助。
答案 0 :(得分:1)
尝试printf("%05X", x)
,其中x
是转换后的数字。这指示printf将您的号码打印到至少5个位置,如果需要更少,则用零填充最左边的位置。
答案 1 :(得分:0)
您的问题与printf()
有关,而不是您将小端数转换为大端数的方式。
要printf()
显示前导零,您应指定一个长度,并在长度之前加上0
:
printf("%04X", little_big(0x830C));
号码4
告诉printf()
它应该将您的号码输出右对齐到一个4个字符的长字段,0
告诉printf()
它应该填充带有字段的字段零,X
是带有大写字母的十六进制输出的格式说明符。