将较大的整数写为二进制并读回它们会产生不好的结果
Writing larger integers as binary and reading them back gives bad result
>我做了一个小程序,将一个整数写入一个.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 个字符的数据读入a
但a
是字符,不能存储超过 1 个字符的数据。这就是问题所在。
在这一行中
in.read((char*)&x, 4);
您将从流中读取的字节填充到位于 &X 的数组中,但 X 是一个字符,因此大小为 1 字节。这可能会导致非常意外的结果,因为可能会发生不必要的内存更改。
为了使您的代码正常工作,只需将 x 的类型从 char 更改为 int。
相关文章:
- 序列化,没有库的整数,得到奇怪的结果
- 尝试将字符串/字符转换为整数会产生意外结果
- 取消引用指向整数的指针时获得不同的结果
- AVX2 整数乘以有符号 8 位元素,产生有符号 16 位结果?
- 为什么 Clang 和 GCC 中两个无符号整数之和的结果类型不同
- 将较大的整数写为二进制并读回它们会产生不好的结果
- C++,概念不适用于无符号整数作为结果类型?
- 比较整数提升后的结果
- 如何将 xt::sum 表达式结果转换为整数
- 涡轮增压C++结果无法与长整数
- 为什么不同的整数声明会改变结果?
- 我可以将比较结果用作C++的整数吗?
- 为什么使用 int64_t 会产生错误的结果,而双精度则按预期进行简单的整数乘法
- std::reduce 似乎将结果转换为整数
- 从文本文件中读取并使用 sizeof 结果计算整数的数量到 nan
- 整数变量与整数字面变化的乘法结果
- 打印整数指针元素时的结果不同
- 整数异或C++的可能结果
- 如何使用字符串和整数获取汽车类的整数结果
- 使用不同的表达式计算同一整数时的结果不一致