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

时间:2013-12-05 12:31:44

标签: c++

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

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

如果我有一个十六进制值0x20ac我怎么能用c ++在文件中逐字节写呢

4 个答案:

答案 0 :(得分:5)

您可以尝试这样的事情:

#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();

答案 1 :(得分:2)

一种选择,使用标准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((char*)array, sizeof(array));

答案 2 :(得分:1)

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

要写一个字节,请使用ostream成员函数&#34; put&#34;。要一次写入多个字节,请使用ostream成员函数&#34;写&#34;。

有一些方法可以使数据类型(例如int)长于一个字节并将它们用作字节数组。这有时被称为类型惩罚,并在其他答案中进行了描述,但要注意字节序和不同大小的数据类型(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();

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

答案 3 :(得分:0)

你可以使用写函数或ostream。 使用c ++函数是ostream。