如何使用c++逐字节写入文件

How to write a file byte by byte using c++

本文关键字:文件 字节 何使用 c++      更新时间:2023-10-16

如何使用c++逐字节写入文件?

unsigned short array[2]={ox20ac,0x20bc};

如果我有一个十六进制值0x20ac,我如何使用c++在文件中逐字节写入它

您可以尝试以下操作:

#include <fstream>
...
ofstream fout;
fout.open("file.bin", ios::binary | ios::out);
int a[4] = {100023, 23, 42, 13};
fout.write((char*) &a, sizeof(a));
fout.close();

一个选项,使用标准C++库:

#include <fstream>
#include <assert.h>
void main()
{
    unsigned short array[2]={ox20ac,0x20bc};
    std::ofstream file;
    file.open("C:/1.dat", std::ios_base::binary);
    assert(file.is_open());
    for(int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
       file.write((char*)(array + i * sizeof(array[0])), sizeof(array[0]));
    file.close();
}

或者,您可以轻松地一次性写入整个数据(无需循环):

file.write((const char*)array, sizeof(array));

要打开输出文件,请使用ofstream(输出文件流,ostream的子类)。如果您不确定输出是否为可读文本(ASCII),请使用ios_base::二进制模式(作为构造函数或open()成员函数中的第二个参数)。

要写入单个字节,请使用ostream成员函数"put"。要一次写入多个字节,请使用ostream成员函数"write"。

有一些方法可以将长度超过一个字节的数据类型(例如int)用作字节数组。这有时被称为类型punning,在其他答案中也有描述,但要注意endianness和不同大小的数据类型(int可以是2-8字节),这在不同的机器和编译器上可能不同。

要测试输出,请将其作为输入文件重新打开并打印字节。

ifstream in("myfile.txt", ios_base::binary);
while(!in.eof()) printf("%02X ", in.get()); //print next byte as a zero-padded width-2 capitalized hexadecimal).
in.close();

或者像普通人一样使用十六进制编辑器。

您可以使用write函数或ostream。使用c++函数是ostream。