私はCでポインタについて学習しています。私はこのプログラムを持っています。メモリ内のポインタと整数表現
void print_bytes(void *start, size_t size);
int main(int argc, char *argv[])
{
int val = 42;
print_bytes(&val ,sizeof(val));
return 0;
}
void print_bytes(void *start, size_t size)
{
int i = 0;
for(i = 0; i < size; i++)
{
printf("%02X ", *((unsigned char *)start + i));
}
}
私はhexadecimal
形式で各バイトの値を印刷しようとしているが、機能print_bytesでstart pointer
変数によって指されます。
私が知っている限り、変数がメモリに格納されるとき、変数はバイナリ形式で格納されます。私は、コードを実行した場合
は、これが私の分析です:
42は最初の8に収まる:メモリは、メモリ内の表現がある整数値42を保持している場合はsizeof整数の変数は、その後4 bytes (32 bits)
あるとし メモリ内のバイトのビット表現。
バイナリ:00000000
00000000
00000000
00101010
ので、私は2A
を得たコードを実行した場合。今のところ、出力は正しいです。
メモリ(すなわちメモリ内のバイナリ値を表すために単一のバイトよりも明確に必要とされる)、42より大きい整数値を保持3000を考えるならば、メモリ内の表現である:
バイナリ:00000000 00000000 00001011 10111000
コードを実行すると、私はBB 80 00 00
のinseadが間違っているように見える 'B8 0B 00 00'が表示されます。
誰かが間違っていることを説明してください。私はこれを何時間も解決しようとしていますが、手がかりはありません。
ありがとうございます。私はすべての答えを感謝し、それらから学ぶことを試みる。
[endianness](https://en.wikipedia.org/wiki/Endianness)についてはこちらをお読みください。 –
最初の例で '42'を使って監視しました。このプログラムはあなたが言うように '2A'を印刷しただけではなく、' 2A 00 00 00'を印刷しました。つまり、最下位バイトが最初になります。 –