-1

我有一个名为 hex_values 的无符号整数数组,其中包含数字。例如:数组的大小是 5,它包含这个数字:

830C 830C 830C 830C 830C

我需要做的是将它们显示为大端值:

0C83 0C83 0C83 0C83 0C83

为了掩饰830C0C83使用了这个功能:

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寻求帮助。

4

2 回答 2

1

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

于 2012-10-06T09:55:58.930 回答
0

您的问题与printf()将小端数转换为大端数的方式无关。

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

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

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

于 2012-10-06T09:59:33.420 回答