二进制文件格式应该如何设计?

二进制文件设计

为什么要写这个总结呢?

下午想对着行车记录仪的上报规范重新写一下Head文件的解析; 因为之前对老版本的文件已经写过一个数据解析的程序,但是新版本的调整感觉需要将整个代码再重新搞一遍;

这让我越写越有点生气,刚才发了一个邮件让他们重新找个一个更好的数据交换方式:

为什么我感到痛苦,我给你解释一下看看你就了解了! 供应商的文件原来是head+body是一个文件: 字段的形式如下

老板的格式如下:
|field1|field2|field3|....|reverse|body|

新版本的格式如下:
|field3|field1|...|resverse|

新版本不但删除了一些字段,而且老的字段也发生了改变,而且有些字段长度也变化了,我在解析的时候,需要重新调整代码的字段意义; 以及每个字段的长度;

供应商虽然把这些变化写到文档里面了,尼玛,你也不能让老子每次对着你的文档重新给你改一遍吧;

正确的编码格式应该是什么样的?

http://hjcapple.github.io/2016/03/31/binary-format.html http://stackoverflow.com/questions/323604/what-are-important-points-when-designing-a-binary-file-format

即时我们可以不用protobuf,但是二进制文件设计的时候是不是有更好的形式呢?

字节 Magic RecorderID Ver Tag Length Value Tag Length Value Pad
长度 4 32 4 1 4 Length   1 4 Length 108
意义 魔数 wifimac 协议版本 字段类型 字段长度 字段值   字段类型 字段长度 字段值 保留字段
                       

当然了,这种格式里面也没有写具体的大头、小头,需要在对应的文档里面备注,但是这种方式相对而言交互性更好一些不是吗? 我也不知道供应商怎么想的,要是我们变更需要加个字段,他们就给加上了,有没有考虑到后面解析的人的问题?

总结,这样的供应商还能有市场,说明了啥?