null终止符是否适合解析二进制文件

时间:2016-08-26 02:37:46

标签: c file null binary

我正在尝试使用保存游戏系统而且我一直试图找出使用c-strings的最佳方法。我知道我可以使用int来标记字符数,但我想知道是否使用空终止符是个好主意。 (特别是因为目前我在尝试在加载端找到空终止符时遇到问题)

TL; DR问题:在二进制文件中使用空终止符是字符串的最佳实践,如果不是,那么你建议使用什么。

另外,如果你能告诉我如何在我的内存缓冲区(C字符串)中间找到一个很好的空终结符,但我从技术上讲它是一个不同的问题。

3 个答案:

答案 0 :(得分:0)

我建议使用SQLite作为文件格式。它更容易处理。

你可以在上面插入blob。

考虑何时需要更新文件格式。使用SQLite它是一块蛋糕。只需在表中添加新列或使用UPDATE ...

检查:https://www.sqlite.org/appfileformat.html

答案 1 :(得分:0)

使用NULL终止符标记二进制文件中字符串末尾的问题是二进制文件可能包含NULL字符。如果你知道你永远不会在文件中存储NULL字符,除了标记字符串的结尾,你会没事的。

如果文件中可能有NULL字符,那么你可以预定义字符串的长度,但是你需要事先知道你将要存储的字符串的最大长度。例如,您可以说,字符串必须占用128个字符,其中未使用的字符将填充NULL。

如果这些解决方案都不适用于这种情况,您始终可以为每个字符串添加长度前缀。

答案 2 :(得分:-1)

您应该能够为二进制文件提供规范。在您的情况下,如果您确实希望将其计为数据,则需要弄清楚如何转义null终止符。检查每个角色是否值得痛苦?通过从文件中读取预定义的长度或长度,可以更容易地进行操作。如果您正在读取的字段实际上是具有空终止符的字符串数组,则可能应指定总数组的长度,并在将字符串读入变量后处理字符串的split