读取std :: istream :: peek()函数的字节数

时间:2017-07-06 16:52:14

标签: c++ file

我尝试读取文件中的下一个字符,只包含字符和只有整数的文件。此函数返回下一个值(int或char)。现在的问题是peek()有多少字节读取?对于第一个文件,它似乎读取一个字节,而对于第二个文件,它似乎读取四个字节。它怎么可能?

2 个答案:

答案 0 :(得分:0)

完全取决于流的类型。

peek()将读取一个字符,但是流与其关联的 traits 决定了什么是字符。流上的char_traits控制着这一点。

这是一个方便的指南:

char    : always 1 byte
wchar_t : platform defined. dictated by its *underlying type* Likely 4 bytes
char32_t: at least 4 bytes
char16_t: at least 2 bytes

fstream实际上是basic_fstream<char>,意味着它将读取与sizeof(char)相同的字节数,即1个字节。它将返回int_type,它也通过 traits

进行控制

答案 1 :(得分:0)

  

[H]有多个字节[s]被读取[by] peek()

std::ifstream::peek() reads one character (i.e. one byte) from the file, and returns it inside an intint的使用是为了有足够的范围来有条件地返回EOF)。

(其他std::basic_istream专精可能有不同的char_typeint_type别名,因此如果您使用它们,确切的类型和数字可能会有所不同。但关键仍然是你提取一个字符,即使你认为你的ASCII文件包含&#34;数字&#34;。)

文件的字节是什么并不重要:人类可读的ASCII文本,人类可读的ASCII数字,编码的ZIP,随机值...... std::ifstream::peek()是一种未格式化的输入function&#34;,这是一种IOStream函数,适用于文件中的字符

  

对于第一个文件,它似乎读取一个字节,而对于第二个文件,它似乎读取四个字节   它怎么可能?

不是。你做错了什么。