我尝试读取文件中的下一个字符,只包含字符和只有整数的文件。此函数返回下一个值(int或char)。现在的问题是peek()有多少字节读取?对于第一个文件,它似乎读取一个字节,而对于第二个文件,它似乎读取四个字节。它怎么可能?
答案 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 int
(int
的使用是为了有足够的范围来有条件地返回EOF
)。
(其他std::basic_istream
专精可能有不同的char_type
和int_type
别名,因此如果您使用它们,确切的类型和数字可能会有所不同。但关键仍然是你提取一个字符,即使你认为你的ASCII文件包含&#34;数字&#34;。)
文件的字节是什么并不重要:人类可读的ASCII文本,人类可读的ASCII数字,编码的ZIP,随机值...... std::ifstream::peek()
是一种未格式化的输入function&#34;,这是一种IOStream函数,适用于文件中的字符。
对于第一个文件,它似乎读取一个字节,而对于第二个文件,它似乎读取四个字节 它怎么可能?
不是。你做错了什么。