erlang语言实现binary_to_term

erlang提供了两个函数 用于erlang数据与二进制的转换,term_to_binary 把erlang数据转成一个二进制数据, binary_to_term 则是 二进制数据转为原始的erlang数据。这两个函数都是c实现的,效率很高,可用于序列化和反序列化数据,可以被直接用来当作网络封包协议。文章主要探讨这种二进制协议数据的组织形式,以及用erlang语言实现binary_to_term

前言

接触erlang可能有这些疑问,或者听别人这样说起:
1、erlang数字可以无限长,远远超过了INT64所能表示的范围,怎么表示的?
2、原子不能太长,会影响封包大小?
3、还有,旧版本erlang浮点数占用太多空间?
别再疑惑了,以上这些都可以在文章中找到答案。

下面演示下这两个函数:
1> term_to_binary(a).
<<131,100,0,1,97>>
2> term_to_binary(1).
<<131,97,1>>
3> term_to_binary({a,b,c}).
<<131,104,3,100,0,1,97,100,0,1,98,100,0,1,99>>
4> binary_to_term(v(1)).
a
5> binary_to_term(v(2)).
1
6> binary_to_term(v(3)).
{a,b,c}
可以看出  term_to_binary/1  生成的二进制数据是比较有规律的,第1个字节固定是131,遵循着一定的封包格式,数据才能被解析出来。知道这个二进制数据的组织形式,就可以用任意语言解包Erlang数据。

初识binary数据

现在重点介绍长整形、原子、浮点数、列表的协议规则,其他数据协议参考文档:External Term Format

erlang长整形

现在重点看下erlang长整形(erlang叫法是Bignums):
10.18 SMALL_BIG_EXT
1 1 1 n
110
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值