ifstream::read 在 ASCII 26 处失败

Posted

技术标签:

【中文标题】ifstream::read 在 ASCII 26 处失败【英文标题】:ifstream::read fails at ASCII 26 【发布时间】:2012-06-22 23:02:36 【问题描述】:

这个问题困扰了我很久。比如代码

ifstream in;
char temp;
int a;

in.open ("Random.txt");

for (a = 0;a < 10000;a++)
    in.read (&temp, 1);

in.close ();

ifstream 遇到替代字符 (ASCII = 26) 之前工作正常。然后,对于所有后续字符,ifstream::read 给了我temp = -1。我真的不希望这种情况发生,而是希望它继续从文件中读取字符而不是-1。我做错了什么?

【问题讨论】:

不是答案,而是评论... 26 不是文件结尾 (EOF) 的 ASCII 字符吗?我会看看运行时。 是的...我完全忘记了这一点。但是我的程序读入的数据包含各种数据,所以当我读入 26 时,它并不是文件的结尾。 【参考方案1】:

您需要以二进制模式打开流。由于历史原因,Windows 上的文本模式会将 Control-Z (ASCII 26) 视为文件的结尾。

还有更多详情in this earlier answer of mine。

【讨论】:

是的,这解决了我的问题!谢谢你。我现在不能接受你的回答,但如果允许,我会在 7 分钟内接受。

以上是关于ifstream::read 在 ASCII 26 处失败的主要内容,如果未能解决你的问题,请参考以下文章

在标准ASCII编码表中,数字码、小写英文字母和大写英文字母的前后次序是啥

如何用C语言输出26个英文字母和其ascii码的对照表

如何用C语言输出26个英文字母和其ascii码的对照表

第29课:ASCII码

求26个字母大写及小写分别对应的ASCII码值

python生成26个字母的列表