boost serialization 32位库与64位库间二进制数据兼容

我们都知道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库是一个很好的东西,不管你使用还是学习都是个宝库,只是他大量使用了模板,初学者不太能掌握。
————————————————
版权声明:本文为CSDN博主「yiquanshui」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yiquanshui/article/details/8435420

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值