私は簡単なプログラムを持っています:
#include <stdio.h>
int main()
{
long i = 16843009;
printf ("%02x \n" ,i);
}
フォーマット指定子を使用%02x
して2文字の出力を取得していますが、取得している出力は次のとおりです。
1010101
私はそれが : であることを期待しています01010101
。
私は簡単なプログラムを持っています:
#include <stdio.h>
int main()
{
long i = 16843009;
printf ("%02x \n" ,i);
}
フォーマット指定子を使用%02x
して2文字の出力を取得していますが、取得している出力は次のとおりです。
1010101
私はそれが : であることを期待しています01010101
。
%02x
は、少なくとも 2 桁を出力し、0
少ない場合は先頭に 's を追加することを意味します。あなたの場合は7桁なので0
、前に余分なものはありません。
また、%x
int用ですが、長いです。%08lx
代わりに試してください。
文字列は、フォーマット幅 2 よりも広いため、パディングを行う必要はありません。
実際に正しい値を取得しています。
x86
(互換性のある) プロセッサがこのようなデータを保存する方法は、リトルエンディアン順です。つまり、MSB が出力の最後になります。
したがって、出力が与えられた場合:
10101010
最後の 2 つの 16 進値10
は最上位バイト ( 2 hex digits = 1 byte = 8 bits
((おそらく不要な) 明確化のため) です)。
したがって、バイトのメモリ格納順序を 逆01010101
にすることにより、実際の値は次のようになります。
それが解決することを願っています!