我正逐字逐句地阅读文件的内容:
该文件包含:
000001111100000
当我使用此代码阅读时
int content;// converting to char will result in proper output.
std::ifstream fin;
fin.open("zero_one");
fin>>content;
while (!fin.eof())
{
std::cout<<content;
fin>>content;
}
fin.close();
我得到输出为:1111100000
(前导零不存在)但是尾随的零存在。
关注点是:当我使用>>
运算符进行读取时,为什么不在输出中得到前导零,而在输出中得到尾随零。
此外,如果我将int
转换为char
content
变量,则输出与文件内容相同。为什么会这样?据我所知,char
和int
之间的唯一区别是变量的字节大小。
答案 0 :(得分:3)
如果content
是int
,则会将数据读取为单个整数:您获得值为{11}的int
。{{1是content
,它分别读取每个字符。
如果您在char
循环中说while
而不是std::cout<<content<<'\n';
,则可以看到差异。然后,如果std::cout<<content;
是content
,您会看到一行包含1111100000,但如果它是int
,您将看到15行,每行输入一行。
如果在输入文件的每个字符之间放置空格,它们将被视为单独的char
并且结果将是相同的,但仍然会有一个重要的区别:{{的值1}}不是int
和char
,而是char(0)
和char(1)
(分别为'0'
和'1'
),ASCII值相应的数字。另一方面0x30
实际上是0x31
或int
。