二进制文件应该是什么样的?
How does binary file should look like?
我是编程初学者,我有一个问题。我想写一个结构体到我的二进制文件中。我对结果也不确定。结构如下:
struct clientData
{
unsigned int id;
char name[25];
char post[15];
char degree[10];
clientData(unsigned int, char*, char*, char*);
};
如您所见,我的结构包含一些字符串。主要问题是:我的字符串是否应该在最终的二进制文件中重新转换(因此它们对于记事本等应用程序不可读)?因为我的结果看起来是这样的(我不能添加图像,所以我只粘贴它):
英里EdgecombeМММММММММ讲解员ММММММММpew1МММММММ
我是这样写二进制文件的:
ofstream binary_1st("binary_input.dat", ios::out | ios::binary);
...
binary_1st.write((char*) &cl, sizeof(clientData));
...
binary_1st.close();
您正在向文件原样写入结构,而不需要任何序列化或打包。因此,结构将按原样编写,字符串将是可读的(如果它们在代码中是可读的),数字将是数字,等等。
顺便说一句,这个M在 里Miles Edgecombe МММММММММdocent ММММММММpew1 МММММММ
意味着你的结构中的字符数组在向它们写入字符串之前不归零,因此末尾没有尾随零,因此'thrash'将在末尾写入。
我的字符串应该在最终的二进制文件中重新转换吗不可读的应用程序,如记事本等)?因为我的结果看起来像这样(我不能添加图像,所以我就粘贴它):
别担心这个。字符串可能不包含换行符。任何将二进制转换为文本格式的代码都应该担心Notepad &c.
您可能不应该发明自己的二进制格式。但是,如果你真的必须这样做,那么请注意以下内容。
- 确保包含版本信息。
- 明确数据大小,可能用固定32位或64位大小的东西替换
int
。 - 以字节为单位存储整数,使其具有固定的端对端。见http://linux.die.net/man/3/htons。
- 使用固定字符串编码。utf - 8。
- 确保你知道你的字符串如何终止。要么在它们前面粘贴一个大小,要么在字符串后面写一个NUL字节(您的示例代码都没有)。
update:我刚刚注意到我的答案可能对初学者来说不是很清楚,但我不想把它写成一篇文章。主要的一点是,逐字存储结构体可能不是一个好主意。
相关文章:
- 正在读取二进制文件(is_open)
- 在C++中将类(带有Vector成员)保存为二进制文件
- 如何从二进制文件中读取字符串
- 保存/加载大量短数组到二进制文件
- 从二进制文件中读取整数数组
- Android 在编译二进制文件时重建静态库
- 在 C++ 中将双精度变量写入二进制文件
- clang 的 libFuzzer 可以在同一二进制文件中测试超过 1 个 API 吗?
- C++:实际上不是从二进制文件中读取
- 如何从二进制文件中的给定符号中获取调用程序图
- 将内部带有矢量的结构保存/读取到二进制文件中
- 编译多个C++文件.调用二进制文件以运行代码
- 如何使用位字段将数据从二进制文件复制到结构中?
- uint8_t同一二进制文件的不同十进制值
- C++单个生成文件多个二进制文件
- 尝试将数字写入二进制文件时引发异常
- C++中读/写二进制文件
- 如何忽略某些二进制文件的执行?
- 对在不同二进制文件中创建的对象文件的依赖关系
- 二进制文件应该是什么样的?