如何使用c++逐字节写入文件
How to write a file byte by byte using 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();
一个选项,使用标准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。
相关文章:
- 在UNIX系统中使用DIR查找文件的字节大小
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 如何在文件中查找字节序列
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- 使用 stbi_write_png,如何将 0 和 1 的矩形字节数组转换为单色 png 文件?
- 如何使用 fprintf 将连续的 512 字节保存到文件中
- 用于 progmem 的C++和头文件压缩的 Web 文件字节数组
- 为什么未关闭的文件大小为 4 字节
- 我能确定从文件中读取的 32 字节二进制数据等于 256 位吗?
- Ascii .txt文件到字节数组 - C++
- 多部分/表单数据丢失大文件的字节
- 我该如何循环遍历我的数组(缓冲区——包含一个文本文件),并将其打印成30字节的块
- 程序错误地读取了二进制文件的一个字节
- 如何从 C 或 C++ 格式的文件中删除字节?
- C++ - 将任何文件的字节读取到无符号字符数组中
- ofstream将额外的零字节写入Unix服务器上的文件
- 传输文件一次又一次地发送相同的字节
- 编码大于原始文本:如何获取零和一的字符串并将它们作为实际字节写入文件
- 查找二进制文件中字节序列的所有匹配项
- 如何从 GDI+ 图元文件对象获取原始图元文件字节