Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.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++_Binaryfiles - Fatal编程技术网

C++ 在C+中的二进制文件中写入整数+;

C++ 在C+中的二进制文件中写入整数+;,c++,binaryfiles,C++,Binaryfiles,假设我想将整数写入一个文件,然后再读取它们。我是否有这样的印象:确保每个整数在文件中正好占用4个字节的唯一方法是将它们写入二进制文件?假设它是一个32位整数,你是对的 如果将其作为整数写入文件,文本编辑器将无法读取它,但它的大小正好与整数的大小相同。为什么需要将整数作为二进制格式而不是纯文本写入文件 每个整数正好占用4字节=>这取决于整数的大小,如果您确定所有整数都可以用4字节表示。这与强制文件格式为二进制无关。您可以直接使用纯文本文件来存储整数。不过,如果您希望文件更紧凑,可以尝试使用二进制文

假设我想将整数写入一个文件,然后再读取它们。我是否有这样的印象:确保每个整数在文件中正好占用4个字节的唯一方法是将它们写入二进制文件?

假设它是一个32位整数,你是对的


如果将其作为整数写入文件,文本编辑器将无法读取它,但它的大小正好与整数的大小相同。

为什么需要将整数作为二进制格式而不是纯文本写入文件

每个整数正好占用4字节=>这取决于整数的大小,如果您确定所有整数都可以用4字节表示。这与强制文件格式为二进制无关。您可以直接使用纯文本文件来存储整数。不过,如果您希望文件更紧凑,可以尝试使用二进制文件


而且,使用二进制文件更容易实现批读取。但我怀疑您是否需要它。

使用
std::ofstream
,您可以执行以下操作:

 std::ofstream os("myfile.bin", std::ios::binary); 
 int x = 42;
 os.write(reinterpret_cast<char*>(&x), sizeof(x)); 
流操作系统的std::of(“myfile.bin”,std::ios::binary); int x=42; 写操作系统(重新解释转换(&x),大小(x)); 读取由
std::ifstream::read
以完全相同的方式完成。您必须在读取/写入
char*
的位置强制转换,因为这是
read
write
所期望的类型

使用
sizeof
将适用于不是4字节的整数,但当然,在具有2字节整数的机器上不能读取4字节整数,反之亦然


当然,如果您希望您的存储是“可移植的”,您需要关心字节顺序。但是,如果您这样做是为了在本地计算机上存储一些数据,那没关系。

您可能想使用。然后,我可以从我刚才写的二进制文件的开头开始,读取4字节的块,并检索实际的整数。是吗?是的,一个文件就像一个大的持久性内存池,当你把4字节的整数放在里面时,如果你以后从文件的开头读取相同数量的字节,你会得到相同的整数。这两种解决方案都有原因。使用二进制格式,由于“无翻译”和所需的大小,速度更快。它是“不可读的”,这可能是好事,也可能是坏事。使用文本格式更便于携带,并且可以在文本编辑器中读取/编辑-这取决于您正在执行的操作。此写入功能默认附加还是在添加新整数时必须将光标移动到文件末尾?您需要使用
seekp
来放置写入光标,或者使用
std::ios::append
附加到文件中。