将较大的整数写为二进制并读回它们会产生不好的结果

Writing larger integers as binary and reading them back gives bad result

本文关键字:结果 整数 二进制      更新时间:2023-10-16

>我做了一个小程序,将一个整数写入一个.bin文件,然后将其读回去。这是代码:

#include <iostream>
#include <fstream>
using namespace std;
int main() {
ofstream f("out.bin", ios::binary);
int a = 1496;
char x;
f.write((char*)&a, 4);
f.close();
ifstream in("out.bin", ios::binary);
in.read((char*)&x, 4);
cout << (int)x;
in.close();
return 0;}

上面的代码(写数字 1496(在控制台中返回 -40。问题可能是什么?谢谢!

f.write((char*)&a, 4);

您想将 4 个字符的数据读入aa是字符,不能存储超过 1 个字符的数据。这就是问题所在。

在这一行中

in.read((char*)&x, 4);

您将从流中读取的字节填充到位于 &X 的数组中,但 X 是一个字符,因此大小为 1 字节。这可能会导致非常意外的结果,因为可能会发生不必要的内存更改。

为了使您的代码正常工作,只需将 x 的类型从 char 更改为 int。