重複の可能性:
Cを使用してintをバイナリ表現で出力します
短いintのバイト表現を出力し、Cでdoubleを出力するにはどうすればよいですか。
関数display_shortIntがあるとしましょう。どのようにすれば、short intのバイト表現を出力できますか?私はCに不慣れです、ありがとう!
重複の可能性:
Cを使用してintをバイナリ表現で出力します
短いintのバイト表現を出力し、Cでdoubleを出力するにはどうすればよいですか。
関数display_shortIntがあるとしましょう。どのようにすれば、short intのバイト表現を出力できますか?私はCに不慣れです、ありがとう!
これはどうですか?
void print_bytes(void *p, size_t len)
{
size_t i;
printf("(");
for (i = 0; i < len; ++i)
printf("%02X", ((unsigned char*)p)[i]);
printf(")");
}
void print_short(short x)
{
print_bytes(&x, sizeof(x));
}
void print_double(double x)
{
print_bytes(&x, sizeof(x));
}
//etc.
これにより、値を形成するバイトが16進数で1バイトあたり2文字で出力されます。
たとえば、リトルエンディアンのマシンでは、print_short(42)
を出力します(2A00)
。ビッグエンディアンのマシンでは、になります(002A)
。
メモリ内でどのように構成されているかを確認したい場合 (アーキテクチャに依存):
short val = 0x1234;
printf( "%02x%02x", ((char*)&val)[0], ((char*)&val)[1] );
それがどのように書かれているかを見たいだけの場合(ビッグエンディアン):
printf( "%04x", val );
それを印刷する直接的な方法 (つまり、printf や別の標準ライブラリ関数を使用する方法) はありません。独自の関数を作成する必要があります。
void printbits(unsigned int v) {
for (; v; v >>= 1)
putchar('0' + (v & 1));
}