【问题标题】:How can I write longs to a binary file in C++?如何在 C++ 中将 long 写入二进制文件?
【发布时间】:2016-12-10 18:50:46
【问题描述】:

我有一个长数组,我想将每个元素写入一个二进制文件。我知道您使用write() 写入二进制文件,但write() 接受两个参数:一个指向char 数组(缓冲区)的指针和一个数字。由于我有一个长数组,我无法使用write() 进行编写。我什至尝试将指向 long int 数组的指针直接传递给第一个参数,但它产生了编译器错误。

这是我正在尝试做的一个示例:

long* arr = new long [999999];

// imaginary code that fills arr with data

file.write(arr,1000000);

如何将我的 long 数组写入二进制文件? 我考虑过以某种方式将 long 转换为 char,但我怀疑这是否可行,并且在数据类型之间的转换。另外,我在编译代码的时候,编译错误留下了这个注释:“no known conversion for argument 1 from 'long int*' to 'const char*'”。

感谢您的帮助。

【问题讨论】:

  • “因为我有一个 long 数组,所以我不能使用 write() 写入” 为什么不呢?
  • “我考虑过以某种方式将 long 转换为字符,但我非常怀疑这是否可行” 为什么不呢?
  • 好奇您进行了哪些研究,因为这已成为 40 年来的常用技术。
  • 好吧,我确实指定了我试图暴力破解它,但它没有用。对我来说,蛮力强迫它意味着这样做......

标签: c++ file io binaryfiles


【解决方案1】:

不,这正是你应该做的:

const size_t N = 999999;
long* arr = new long[N];
file.write((const char*)arr, sizeof(long)*N);

longs 中的 reinterprets your array 作为一个简单的字节序列(即chars),并将该序列写入文件。

【讨论】:

  • 啊...所以我应该只是打字?
  • 好吧,我说我将数组直接传递到参数中,而不进行类型转换。无论如何,你解决了我的问题,所以谢谢!
  • @C.He:如图所示,“蛮力”正在施放。我不会将隐式转换描述为强制任何东西,因此需要强制转换。
  • 请记住,如果您在具有不同 CPU(字节顺序不同)的两个系统上使用此数据文件,您将遇到问题。如果您希望它是可移植的,请使用 htonl() 存储它们,当您阅读它们时使用 ntohl()
猜你喜欢
  • 1970-01-01
  • 2011-05-29
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
相关资源
最近更新 更多