erlang语言实现binary_to_term

本文介绍了Erlang中的binary数据类型,包括长整形、原子和浮点数的表示方式,并详细探讨了binary_to_term的实现过程。
摘要由CSDN通过智能技术生成
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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值