求算法:序列化时的压缩办法

czstemp 2011-07-11 02:10:38
我要把为了把一些int型数据序列化成string后储存。

如果用stringStream,或atoi等函数,序列化后的数据大增,比如int 100000000本来只有4字节,
变成字符串后要10字节,太浪费了。

如果直接内存拷贝,又怕int中有连续的八个二进制00000000,等效于字符串终止符。

有没有快速的编码方法把一段内存变成askii字符?
...全文
306 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackyjkchen 2011-07-11
  • 打赏
  • 举报
回复
我没用过,不是我们用过,一字之差,差之千里
jackyjkchen 2011-07-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 czstemp 的回复:]

其实是用mongoDB存储,不知jackyjkchen大侠用过没,如果string中有\0
c_str()会不会错?

另外,我对mongoDB的二进制数据存储不太了解,好像是存文件,估计性能不好
[/Quote]
string可以存二进制数据的,c_str只是个内置类型指针,给你个起始地址,你想延长到哪里全看你自己的逻辑,注意别用strcpy、strlen这样专门处理字符串的函数就可以。

一般数据库都支持二进制存取,我们用过mongoDB,你可以试一下,应该可以。

反正还有base64方案备用,这个是专门用来序列化二进制数据的
ouyh12345 2011-07-11
  • 打赏
  • 举报
回复
string里可以有0的
czstemp 2011-07-11
  • 打赏
  • 举报
回复
其实是用mongoDB存储,不知jackyjkchen大侠用过没,如果string中有\0
c_str()会不会错?

另外,我对mongoDB的二进制数据存储不太了解,好像是存文件,估计性能不好
jackyjkchen 2011-07-11
  • 打赏
  • 举报
回复
你的存储是说“写文件”?

那就更简单了,连内存拷贝都不用的
直接去写int的地址就行了,别忘了用二进制方式或者windows api
luciferisnotsatan 2011-07-11
  • 打赏
  • 举报
回复
???
用二进制打开文件,写入不就行了。
读取时你也用二进制来读。
jackyjkchen 2011-07-11
  • 打赏
  • 举报
回复
阶段==截断
jackyjkchen 2011-07-11
  • 打赏
  • 举报
回复
而且,直接内存拷贝有什么不可以?

如果只是网络传输的话,socket是不会阶段的,你直接用unsigned char*存储就是了。

即便用string,也没问题,别用+=,用append,强制指定长度
jackyjkchen 2011-07-11
  • 打赏
  • 举报
回复
base64编码,长度*4/3,增加不多,电子邮件就这样做的

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧