要打印int 中的所有字节?请记住,int 是 32 位的,即四个字节。将其读入char 缓冲区可以更轻松地访问int 中的这四个字节。
编辑:对int 类型的一点解释...
假设你有一个int:
int someIntValue = 0x12345678;
这以 32 位存储在内存中。由于单个字节 (char) 是 8 位,所以 int 有四个字节。 int 中的每个字节都可以使用char 数组或指针来访问:
char *someCharPointer = (char *) &someIntValue;
现在您可以访问这四个单独的字节,并查看它们的值:
for (int i = 0; i < sizeof(int); i++)
printf("someCharPointer[%d] = 0x%02x\n", i, someCharPointer[i]);
上面将打印(在 x86 等小端机器上):
someCharPointer[0] = 0x78
someCharPointer[1] = 0x56
一些字符指针[2] = 0x34
一些字符指针[3] = 0x12
如果您现在将someIntValue 更改为号码1
someIntValue = 1;
再打印出来,你会看到这个结果:
一些字符指针[0] = 0x00
一些字符指针[1] = 0x00
一些字符指针[2] = 0x00
一些字符指针[3] = 0x01
int 的内存布局
如果你有一个int 类型的变量存储在内存中,其值为0x12345678,它的存储方式如下:
8 位
,----^---。
| |
+--------+--------+--------+--------+
|00111000|01010110|00110100|00010010|
+--------+--------+--------+--------+
| |
`-----------------v-----------------'
|
32 位
这个int与0x78、0x56、0x34和0x12这四个字节(或char)相同。
但是,如果我们将 int 更改为数字 1,那么它的存储方式如下:
8 位
,----^---。
| |
+--------+--------+--------+--------+
|00000000|00000000|00000000|00000001|
+--------+--------+--------+--------+
| |
`-----------------v-----------------'
|
32 位
这个int与0x00、0x00、0x00和0x01这四个字节(或char)相同。
所以现在您希望可以看到读取为int 并打印为char 将显示与读取和int 并打印为int 不同的结果。