boost serialization 32位库与64位库间二进制数据读写

来源:互联网 发布:美工教学 编辑:程序博客网 时间:2024/05/29 15:50

    我们都知道32位平台与64位平台间有很多要注意的地方,对于二进制数据来说主要就是基本数据类型的大小 如win32下long, int, 都会4字节的size_t是unsigned int 的别名, 二在winddows上的64位 long, int 仍是4字节的但是size_t却不再是unsigned int类型而是 _int64类型。这样就导致如果之前使用了size_t类型存储的话则数据就不再兼容了。

    在boost serialization库中的bianary_archive存储字符串时首先存储字符串的长度其读写类型使用的就是size_t类型,所以用64位版本读取之前32为存储的数据时肯定就不对了。也查找了其他的资料, 没有找到什么好方法。既然没什么好办法,东西又有源码,那就自己动手吧,反正也只有公司内部使用,说不定还就我一个人需要。

    首先的找到存储基本数据类型的那个文件 archive下面的<basic_binary_iprmitive.hpp>文件,增加一个对size_t类型的load重载函数,其功能就是把任何情况下的size_t都用unsigned int类型来存。当然还需要在对应的文件再重载一个相应的读取函数。 另外一个地方是对于容器类型大小的存储,在std中容器类型的大小都是用的size_t类型,但是boost并没有直接拿他来存储,而是定义了另外一个数据类型collection_size_type,其实里面也就是一个size_t的类型,我并不需要这个,所以就直接把里面的typedef改了用unsigned int来作为原类型,这样32位和64位存储容器大小时的数据也就统一了。改了这三个地方后重新编译,读取之前32位程序存储的数据的确没问题了,但也不确定还有没有其他的问题。

    boost库是一个很好的东西,不管你使用还是学习都是个宝库,只是他大量使用了模板,初学者不太能掌握。

原创粉丝点击