gpt4 book ai didi

c++ - std::fstream 似乎以不同的大小读取

转载 作者:行者123 更新时间:2023-11-30 02:05:38 25 4
gpt4 key购买 nike

我正在使用 ubuntu 10.04 和 gcc。我有一个带有我自己的魔数(Magic Number)的二进制文件。当我读取文件时,魔数(Magic Number)不一样。流接缝是正确的。

写魔数(Magic Number):

std::fstream chfile;
chfile.open(filename.c_str(), std::fstream::binary | std::fstream::out);
if (chfile.good())
{
chfile << (unsigned char)0x02 << (unsigned char)0x46 << (unsigned char)0x8A << (unsigned char)0xCE;
// other input
chfile.close();
}

读取魔数(Magic Number):

std::fstream chfile;
chfile.open(filename.c_str(), std::fstream::binary | std::fstream::in);
if (chfile.good())
{
unsigned char a,b,c,d;
chfile >> a;
chfile >> b;
chfile >> c;
chfile >> d;
printlnn("header must : " << (int)0x02 << ' ' << (int)0x46 << ' ' << (int)0x8A << ' ' << (int)0xCE); // macro for debugging output
printlnn("header read : " << (int)a << ' ' << (int)b << ' ' << (int)c << ' ' << (int)d);
chfile.close();
}

当我使用 02 46 8A CE 作为魔数(Magic Number)时,它没问题(如输出所示):

header must : 2 70 138 206
header read : 2 70 138 206

但是当我使用 EA 50 0C C5 时,输出是:

header must : 234 80 12 197
header read : 234 80 197 1

最后一个 1 是下一个输入的合法值。那么为什么它们不同,我该如何解决这个问题?

最佳答案

在第二种情况下,operator>> 跳过字符值 12。operator>>12 识别为空白,并跳过它,搜索下一个有效字符。

尝试使用未格式化的输入操作(如 chfile.read()chfile.get())。

关于c++ - std::fstream 似乎以不同的大小读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9469361/

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