前导0没有从文件中读取

时间:2017-07-25 18:23:32

标签: c++ file-handling

我正逐字逐句地阅读文件的内容:

该文件包含:

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变量,则输出与文件内容相同。为什么会这样?据我所知,charint之间的唯一区别是变量的字节大小。

1 个答案:

答案 0 :(得分:3)

如果contentint,则会将数据读取为单个整数:您获得值为{11}的int。{{1是content,它分别读取每个字符。

如果您在char循环中说while而不是std::cout<<content<<'\n';,则可以看到差异。然后,如果std::cout<<content;content,您会看到一行包含1111100000,但如果它是int,您将看到15行,每行输入一行。

如果在输入文件的每个字符之间放置空格,它们将被视为单独的char并且结果将是相同的,但仍然会有一个重要的区别:{{的值1}}不是intchar,而是char(0)char(1)(分别为'0''1'),ASCII值相应的数字。另一方面0x30实际上是0x31int