Elixir-Basic types 之 Binaries、strings、charlist

Unicode and code point

  • is_binary/1 : 判断是否为binary
  • ?a :查看字母a的code point
  • byte_size/1 :查看字符的字节长度
  • 查看字符binary的存储方式
    • 通过拼接null byte <<0>> 的方式
      iex>  "hello" <> <<0>> 
      
    • IO.inspect/2函数
      iex> IO.inspect("hełło", binaries: :as_binaries)
      <<104, 101, 197, 130, 197, 130, 111>>
      

Bitstring

  • bitstring 是 Elixir 中的基础数据类型之一,
  • 语法格式是: <<>>
  • bitstring格式的数据会作为一个连续序列存储在内存中
    • 默认,8bit(一个字节)用来存储一个数字,用户可以通过 ::n::size(n)方法来声明要用几个字节来表示一个数字
      iex(25)> <<42>>
      "*"
      iex(26)> <<42>> == <<42::8>>
      true
      

Binary

  • 一个Binary是一个由8位组成的 Bitstring 串,这意味着所有的binary都是bitstring,但是反之,并不是所有的bitstring都是binary。

  • is_bitstring/1 :判断是否为bitstring

  • is_binary/1:判断是否为binary

  • binary 和 bitstring 可以使用模式匹配

    iex(1)> <<0, 1, x>> = <<1, 2, 3>>
    ** (MatchError) no match of right hand side value: <<1, 2, 3>>
    
    iex(1)> <<0, 1, x>> = <<0, 1, 3>>
    <<0, 1, 3>>
    iex(2)> x
    3
    iex(3)> 
    
  • binary-size(n) 可以匹配 n 个字节,binary模式匹配

    iex(3)> <<head::binary-size(2), rest::binary>> = <<1, 2, 3, 4>>
    <<1, 2, 3, 4>>
    iex(4)> head
    <<1, 2>>
    iex(5)> rest
    <<3, 4>>
    
  • <<head, rest::binary>>,为binary模式匹配

  • <<head::utf8, rest::binary>>: head为 utf8 模式匹配,rest 为 binary 模式匹配

    iex(1)> <<head, rest::binary>> = "banana"
    "banana"
    iex(2)> head
    98
    iex(3)> head == "b"
    false
    iex(4)> head == ?b 
    true
    iex(5)> rest
    "anana"
    iex(6)> 
    

string

  • String.length/1
  • String.codepoints/1
  • String.graphemes/1

charlists

charlist 有2种展现方式,一个是整数list,另外一个是''单引号包裹的字符串;
charlist 是一个整数的list,list里的整数全部对应着有效的code points。
""双引号表示string,chalist literals 用''单引号表示
一个charlist 包含整数code points,但是在打印时显示的是ASCII 范围内的单引号格式的code points

iex(21)> [104, 101, 108, 108, 111]
'hello'
iex(22)> is_list('hello')
true

将整数按照code point解释,总能让我们发现一些不可思议的行为。举个例子,如果你存储一个整数的list,其中所有的数值都在0-127范围内;iex默认会将这个list解释为一个charlist,并且将会展成对用的ASCII字符
<> string可以使用 <> 操作符进行拼接,charlist 只能使用 ++ 操作符进行拼接。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值