9.Erlang 二进制操作

一,为什么使用二进制类型?

使用低级别的编程更加可靠,而且相比于元组和列表更加节省空间。有时候大量结构化的数据必须在计算机之间相互移动,我们就需要确保数据尽可能高效传播,利用一切可以存储的位置,每个位置尽可能含有较多的信息。

二,二进制类型

1.内置函数转化二进制

1>A={test,1,2,3,[1,2,3]}.
{test,1,2,3,[1,2,3]}
2> Bin1=term_to_binary(A).
<<131,104,5,100,0,4,116,101,115,116,97,1,97,2,97,3,107,0,
  3,1,2,3>>
3> Term1=binary_to_term(Bin1).
{test,1,2,3,[1,2,3]}
4> B=[1,2].
[1,2]
5> Bin2=list_to_binary(B).
<<1,2>>
6> Lis1=binary_to_list(Bin2).
[1,2]
7> Lis1=binary_to_list(Bin1).
** exception error: no match of right hand side value
                    [131,104,5,100,0,4,116,101,115,116,97,1,97,2,97,3,107,0,3,
                     1,2,3]

2.判断一个数据是不是二进制,可以使用is_binary

8> is_binary(Bin1).
true

3.提取出任意长度的二进制类型,使用split_binary

9> {Bin3,Bin4}=split_binary(Bin1,4).
{<<131,104,5,100>>,
 <<0,4,116,101,115,116,97,1,97,2,97,3,107,0,3,1,2,3>>}

4.可以直接书写二进制

14> Bin1= <<1,2,3>>.
<<1,2,3>>
15> binary_to_list(Bin1).
[1,2,3]
16> binary_to_term(Bin1).
** exception error: bad argument
     in function  binary_to_term/1
        called as binary_to_term(<<1,2,3>>)
17> <<E,F>> =Bin1.
** exception error: no match of right hand side value <<1,2,3>>
18> <<E,F,G>> =Bin1.
<<1,2,3>>

5.二进制的表达Expr:Size/Type

Size:以指定过的大小为单位,一个整数默认是8,浮点数数64(位)。

Type:一个类型说明符列表,并以连字符分隔,可以是如下内容

type——整数,浮点数,二进制,字节,位,串

sign——singed和unsigned,如果是sign,第一位0位正,1位负

endian——取决于CPU,默认是big,还有little和native。big表示第一字节是最低位,little第一字节最高位,运行的时候再确定是native

指定单位,比如unit:Val——使用的位的数目是Val*N,N是该值的大小,二进制和字节是8

22> <<Int1:2,Int2:6>> = <<128>>.
<<128>>
23> Int1.
2
24> Int2.
0
25> <<5:4/little-signed-integer-unit:4>>.
<<5,0>>

6.按位匹配

27> Bin= <<1,1:16>>.
<<1,0,1>>
28> <<D:16,F/binary>> =Bin.
<<1,0,1>>
29> [D,F].
[256,<<1>>]
33> Frame= <<1,3,0,0,1,0,0,0>>.
<<1,3,0,0,1,0,0,0>>
34> <<Type,Size,Bin:Size/binary-unit:8,_/binary>> =Frame.
<<1,3,0,0,1,0,0,0>>
35> Type.
1
36> Size.
3
37> Bin.
<<0,0,1>>
38> Size.
3

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值