如何使用c++逐字节写入文件?
unsigned short array[2]={ox20ac,0x20bc};
如果我有一个十六进制值0x20ac,我如何在C++中将其逐字节写入文件?
如何使用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();
std::ofstream
时,ios::out
说明符是多余的。 - Antonio一种方法是使用标准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));
sizeof(array)
,不需要除以 sizeof(array[0])
。 - interjay要打开一个输出文件,请使用ofstream(输出文件流,ostream的子类)。如果您不确定您的输出是否为可读文本(ASCII),请使用ios_base :: binary模式(作为构造函数或open()成员函数的第二个参数)。
要写入单个字节,请使用ostream成员函数“put”。要一次写入多个字节,请使用ostream成员函数“write”。
有一些方法可以将数据类型(例如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();
或者像普通人一样使用十六进制编辑器。
你可以使用write函数或ostream。 在C++中使用的函数是ostream。
out.write(reinterpret_cast<char const*>(array), sizeof array)
可以让你写出底层的字节表示。 - Simple