gpt4 book ai didi

c++ - 程序错误地读取二进制文件的一个字节

转载 作者:搜寻专家 更新时间:2023-10-31 01:28:47 25 4
gpt4 key购买 nike

<分区>

我正在尝试读取一个二进制文件并将一个由四个小端字节组成的序列添加到一个 int 中,但由于某种原因,其中一个字节在读取时出现某种错误。该程序是一个保存文件编辑器,只有在我将其中一个文件的播放时间(秒 * 60)编辑为某个大数字(我在下面的示例中使用 7075920)后才会发生错误。

读取部分的代码如下:

char buffer[4];
std::ifstream saveFile (ui->directoryLine->text().toStdString(), std::ios::binary | std::ios::in);

saveFile.seekg(saveSlot*2416+44); //Read playtime and convert
saveFile.read(buffer, 4);
playtime = (buffer[0] | (buffer[1]<<8) | (buffer[2]<<16) | (buffer[3]<<24))/60;
ui->hSpinBox->setValue(playtime/3600);
ui->mSpinBox->setValue(playtime/60 % 60);
ui->sSpinBox->setValue(playtime % 60);

当我在文件(十六进制 6BF850)上将播放时间写为 7075920 并使用十六进制编辑器查看文件时,字节被正确设置为 50 F8 6B 00(小端)

但是在读取修改后的文件后使用带有 %X 的 printf 打印缓冲区返回:50 FFFFFFF8 6B 0,然后播放时间计算为 -32

我不明白该程序如何处理未修改的小 int 文件,但如果修改后的文件没有错误,则返回损坏的字节,并且十六进制编辑器的 diff 工具显示修改后的文件和修改后的文件之间的唯一区别原始的(有效的)在这四个修改后的字节上。

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