39

私は簡単なプログラムを持っています:

#include <stdio.h>
int main()
{
        long i = 16843009;
        printf ("%02x \n" ,i);
}

フォーマット指定子を使用%02xして2文字の出力を取得していますが、取得している出力は次のとおりです。

1010101 

私はそれが : であることを期待しています01010101

4

4 に答える 4

53

%02xは、少なくとも 2 桁を出力し、0少ない場合は先頭に 's を追加することを意味します。あなたの場合は7桁なので0、前に余分なものはありません。

また、%xint用ですが、長いです。%08lx代わりに試してください。

于 2013-08-26T07:38:08.517 に答える
3

文字列は、フォーマット幅 2 よりも広いため、パディングを行う必要はありません。

于 2013-08-26T07:37:17.007 に答える
-2

実際に正しい値を取得しています。

x86(互換性のある) プロセッサがこのようなデータを保存する方法は、リトルエンディアン順です。つまり、MSB が出力の最後になります。

したがって、出力が与えられた場合:

10101010

最後の 2 つの 16 進値10は最上位バイト ( 2 hex digits = 1 byte = 8 bits((おそらく不要な) 明確化のため) です)。

したがって、バイトのメモリ格納順序を 01010101にすることにより、実際の値は次のようになります。

それが解決することを願っています!

于 2016-02-19T18:24:58.637 に答える