C++ 将较大的整数写入二进制文件并将其读回会产生不良结果

C++ 将较大的整数写入二进制文件并将其读回会产生不良结果,c++,C++,我制作了一个小程序,将一个整数写入.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::

我制作了一个小程序,将一个整数写入.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;}
#包括
#包括
使用名称空间std;
int main(){
流f(“out.bin”,ios::binary);
INTA=1496;
字符x;
f、 写((字符*)&a,4);
f、 close();
ifstream-in(“out.bin”,ios::binary);
in.read((char*)&x,4);
库特
您想将4个字符的数据读入
a
,但
a
是一个字符,不能存储超过1个字符的数据。这就是问题所在

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

在此行中

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

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

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

在这一行中

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

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


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

char x
只有一个字节的空间,而不是四个字节。您的意思是
int x
?您是否尝试过将
x
设置为
int
?您正在写入4个字节(int)读取一个字节的字符是。除此之外,向一个字节的变量读取4个字节会覆盖该变量后面的内存。这可能会导致崩溃或无效,具体取决于“x”变量在内存中的位置。在这种情况下,它是堆栈。
char x
只有一个字节i的空间n四个。你是说
intx
?你试过把
x
变成
int
?你在写4个字节(int)读入一个字节的字符也是如此。除此之外,读入一个字节变量的4个字节会覆盖该变量后面的内存。这可能会导致崩溃或无效,具体取决于“x”变量在内存中的位置。在这种情况下,它是堆栈。为什么要删除我的问题的答案?Bec因为它是C++的,而不是C,我直到你指出它才意识到。我不知道任何可以运行JavaScript代码的C特定库:(我仍然可以得到答案,因为当我看到这个帖子已经被删除,不再是可查看的标题,我选择不重新加载页面。为什么你删除我的问题的答案?因为它是C++ +不是C,我没有意识到,直到你指出。嗯,我不知道任何可以运行JavaScript C的C特定库。ode:(我仍然可以访问答案,因为当我看到这篇文章已经被删除并且不再可见的横幅时,我选择不重新加载页面。
f.write((char*)&a, 4);