int main()
{
char buffer[100];
fread(buffer,1,4,stdin);
int i=0;
while(i<4)
{
printf ("%c,\n",buffer[i]);
i=i+1;
}
getch();
}
fread函数如何知道,何时停止读取输入流,size和count元素表示什么,以及如何操作大小和计数以获得最大流读取速度?
答案 0 :(得分:1)
打印int
中的所有字节?请记住,int
是32位,即4个字节。将其读入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 someCharPointer[2] = 0x34 someCharPointer[3] = 0x12
如果您现在将someIntValue
更改为数字1
someIntValue = 1;
再次打印出来,你会看到这个结果:
someCharPointer[0] = 0x00 someCharPointer[1] = 0x00 someCharPointer[2] = 0x00 someCharPointer[3] = 0x01
int
如果你有一个int
类型的变量存储在内存中,其值为0x12345678
,它的存储方式如下:
8 bits ,----^---. | | +--------+--------+--------+--------+ |00111000|01010110|00110100|00010010| +--------+--------+--------+--------+ | | `-----------------v-----------------' | 32 bits
此int
与四个字节(或char
)0x78
,0x56
,0x34
和0x12
相同。
但是,如果我们将int
更改为数字1
,则会将其存储为:
8 bits ,----^---. | | +--------+--------+--------+--------+ |00000000|00000000|00000000|00000001| +--------+--------+--------+--------+ | | `-----------------v-----------------' | 32 bits
此int
与四个字节(或char
)0x00
,0x00
,0x00
和0x01
相同。
所以现在你希望看到如何以int
阅读和打印为char
将如何显示与阅读和int
不同的结果并将其打印为int
。