-1

数値を含む hex_values という unsigned int 配列があります。例: 配列のサイズは 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);
}

問題は、number の最初の文字がゼロの場合、printf はそのゼロを表示しないことです...それを修正する方法はありますか?

THXの助けを借りて...

編集 :

OK、別の問題があります...たとえば、5つの値を含むサイズ5の配列があります.830C 830C 830C 830C 830Cとしましょう... 2つの関数があります(最初の投稿で言及されている最初のもの)。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 つの数字を持つ配列の名前であり、numbers は配列に含まれる値の数を表す数字にすぎません ... 問題は、配列に 1 よりも多くの値が含まれている場合、show_big 関数はそれらの数字をビッグ エンディアンで表示しないことです正しく(0C83 0C83 ...)...理由がまったくわかりません...必要な場合は、ここに完全なコードを貼り付けることができます... THX 助けてください。

4

2 に答える 2

1

を試してみてくださいprintf("%05X", x)xは変換された数値です。これは、printf に数値を少なくとも 5 つの位置に出力し、それより少ない場合は、一番左の位置をゼロで埋めるように指示します。

于 2012-10-06T09:55:58.930 に答える
0

あなたの問題は、printf()リトルエンディアン番号をビッグエンディアン番号に変換する方法ではなく、に関係しています。

forprintf()で先行ゼロを表示するには、長さを指定し、長さの前に0:

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

数値4は、数値printf()を右揃えで 4 文字の長さのフィールドに出力する必要があることを0示しprintf()、フィールドの先頭にゼロを埋め込む必要があることを示しX、大文字の 16 進数出力の書式指定子です。

于 2012-10-06T09:59:33.420 に答える