设为首页收藏本站

Erlang中文论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14681|回复: 0
打印 上一主题 下一主题

erlang中如何利用递归把数据打包

[复制链接]
跳转到指定楼层
楼主
发表于 2015-1-9 21:16:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       在erlang中经常要把一些数据打包为二进制,但是问题就在于这些数据中会不同的要求,例如[ 姓名:32/big-integer-unsigned,      年龄:16/big-integer-unsigned,
      性别:8/big-integer-unsigned]
    当遇到这种情况下我们应该如何做呢?下面是我自己的一点见解
首先可以将这些数据用元组列表的形式保存起来并把数据要求的类型加入 如:
Lists=[{?int32u,Name},{?int16u,Age},{?int8,Sex}],
接着:
encode([],Bin) -> Bin;
encode([{Type,Val}|Lists],Bin) ->
        encode(Lists,encode_val(Type,Val,Bin)).

encode_val(?int32u,Val,Bin)->
        <<Val:32/big-integer-unsigned,Bin/binary>>;
encode_val(?int16u,Val,Bin)->
        <<Val:16/big-integer-unsigned,Bin/binary>>;

encode_val(?int8u,Val,Bin)->
        <<Val:8/big-integer-unsigned,Bin/binary>>;

.....

  如果数据类型有很多,那么在写encode_val的过程很麻烦,但试想下当你把所需的类型
都预先写好了,后面的就只需要你调用encode这个函数就可以一一帮你转换为你所需要的
数据包了,这就算是痛苦一时但幸福一生哦!!







分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|Erldoc.com  

GMT+8, 2024-11-27 11:21 , Processed in 0.340840 second(s), 10 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表