gpt4 book ai didi

c++ - ifstream 运算符 >> uint16_t 设置 failbit

转载 作者:太空宇宙 更新时间:2023-11-03 10:42:56 28 4
gpt4 key购买 nike

我正在尝试使用 c++ std::ifstream 类将二进制文件准备成一组变量。

以下示例有效:

std::ifstream inFile;
inFile.open("example.bin");
uint8_t temp8;
uint16_t temp16;
inFile >> temp8;
inFile >> temp8;

但是如果我用一行替换最后两行

inFile >> temp16;

未读取任何内容,inFile.fail() 返回 true

谁能解释一下,为什么我不能读入 16 位变量?

最佳答案

operator>>阅读重载 uint16_t from istreams 是一个格式化的输入函数,这意味着不读取二进制数据,它读取一个字符串并在必要时将其转换为数字(例如使用 strtoul 或类似的)。

http://en.cppreference.com/w/cpp/io/basic_istream 所述

The class template basic_istream provides support for high level input operations on character streams. The supported operations include formatted input (e.g. integer values or whitespace-separated characters and characters strings) and unformatted input (e.g. raw characters and character arrays).

inFile >> temp16尝试读取一系列(通常)ASCII 数字,直到第一个非数字字符,然后将该数字序列转换为数字,如果它适合 uint16_t将其存储在 temp16 中.如果您正在读取二进制文件,则 istream 可能不会找到 ASCII 数字序列,因此读取失败。

您需要使用未格式化的输入函数直接从文件中读取 16 位,而无需尝试将字符串解释为数字,例如:

inFile.read(reinterpret_cast<char*>(&temp16), 2);

关于c++ - ifstream 运算符 >> uint16_t 设置 failbit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30550887/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com