int
?内のすべてのバイトを出力するには anint
は 32 ビット、つまり 4 バイトであることに注意してください。それをchar
バッファに読み込むと、.xml 内のこれらの 4 バイトに簡単にアクセスできますint
。
編集:タイプの説明はほとんどありint
ません...
あなたが持っているとしましょうint
:
int someIntValue = 0x12345678;
これはメモリに 32 ビットで格納されます。1 バイト ( char
) は 8 ビットなので、 まで 4 バイトありますint
。の各バイトには、配列またはポインターint
を使用してアクセスできます。char
char *someCharPointer = (char *) &someIntValue;
これで、これらの 4 つの個別のバイトにアクセスして、それらの値を確認できます。
for (int i = 0; i < sizeof(int); i++)
printf("someCharPointer[%d] = 0x%02x\n", i, someCharPointer[i]);
上記は (x86 などのリトル エンディアン マシンで) 印刷されます。
someCharPointer[0] = 0x78
someCharPointer[1] = 0x56
someCharPointer[2] = 0x34
someCharPointer[3] = 0x12
someIntValue
今の番号に変えたら1
someIntValue = 1;
もう一度印刷すると、次の結果が表示されます。
someCharPointer[0] = 0x00
someCharPointer[1] = 0x00
someCharPointer[2] = 0x00
someCharPointer[3] = 0x01
のメモリ レイアウトint
type の変数がint
value でメモリに保存されている場合、次0x12345678
のように保存されます。
8ビット
、----^-----。
| | | |
+--------+--------+--------+--------+
|00111000|01010110|00110100|00010010|
+--------+--------+--------+--------+
| | | |
「-----------------v-----------------」
| |
32ビット
これint
は、4 バイト (またはchar
) 0x78
、0x56
、0x34
および と同じ0x12
です。
ただし、をint
数値に変更すると、次1
のように保存されます。
8ビット
、----^-----。
| | | |
+--------+--------+--------+--------+
|00000000|00000000|00000000|00000001|
+--------+--------+--------+--------+
| | | |
「-----------------v-----------------」
| |
32ビット
これint
は、4 バイト (またはchar
) 0x00
、0x00
、0x00
および と同じ0x01
です。
int
これで、 として読み取って として印刷すると、 として読み取って印刷するchar
場合とは異なる結果がどのように表示されるかがわかると思います。int
int