Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C++;?_C++_File_Io_Binaryfiles - Fatal编程技术网

C++ 如何在C++;?

C++ 如何在C++;?,c++,file,io,binaryfiles,C++,File,Io,Binaryfiles,我有一个长数组,我想把每个元素写入一个二进制文件。我知道您使用write()写入二进制文件,但是write()接受两个参数:指向字符数组(缓冲区)的指针和数字。因为我有一个长数组,所以无法使用write()进行编写。我甚至尝试将指向长int数组的指针直接传递到第一个参数中,但它产生了一个编译器错误 下面是我尝试做的一个例子: long* arr = new long [999999]; // imaginary code that fills arr with data file.write

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

下面是我尝试做的一个例子:

long* arr = new long [999999];

// imaginary code that fills arr with data

file.write(arr,1000000);
如何将long数组写入二进制文件?我曾考虑过以某种方式将long转换为字符,但我怀疑这是否可行,并且在数据类型之间转换时可能会损失精度。此外,当我编译代码时,编译器错误留下了这样一条注释:“
参数1没有从'long int*'到'const char*'的已知转换”


谢谢你的帮助。

不,这正是你应该做的:

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

这将
long
s作为一个简单的字节序列(即
char
s),并将该序列写入文件。

“由于我有一个long数组,我无法使用write()进行写入。”“为什么不呢?”我曾考虑以某种方式将long转换为char,但我非常怀疑这是否可行。”为什么不呢?我很好奇你做了什么研究,因为这是一种常见的技术已经有40年了。好吧,我确实指定了我试图用蛮力来强迫它,但它不起作用。蛮力强迫我这么做就意味着…啊。。。那么我应该直接进行类型转换吗?我说过我直接将数组传递到参数中而不进行类型转换。不管怎样,你解决了我的问题,谢谢@他:“暴力强迫”正在施法,如图所示。我不会将隐式转换描述为强制转换,因此强制转换是必需的。请记住,如果您在两个CPU不同(字节顺序不同)的系统上使用此数据文件,您将遇到问题。如果您希望它是可移植的,请使用htonl()存储它们,并且在读取它们时使用ntohl()