如何使用c ++逐字节写文件?
unsigned short array[2]={ox20ac,0x20bc};
如果我有一个十六进制值0x20ac我怎么能用c ++在文件中逐字节写呢
答案 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。