elixir二进制模式匹配

for << << b1::size(2), b2::size(3), b3::size(3) >> <- "hello" >>,
...> do: "0#{b1}#{b2}#{b3}"
["0150", "0145", "0154", "0154", "0157"]

 

1)    h ascii码的10进制对应值是 104 

   2 )    104 转换成 二进制 01101000

   3 )  按照这个模式   b1::size(2), b2::size(3), b3::size(3)         b1 占2位 01转换成十进制为1,  b2占3位 101 转换成十进制为5, b3占3位 000 转换成十进制为0

  4)   所以 按照  "0#{b1}#{b2}#{b3}" 方式返回  "0150" , 就是["0150"]

例子2 

bin = <<3 :: size(2), 5 :: size(4), 1 :: size(2)>>
<<213>>

3的二进制是 11 , size(2)表示2个比特位, 所以11保留

5的二进制位是101 ,size(4)表示占4个比特位 ,所以还不够用0补位,最后是 0101

1的二进制位是01  size(2)表示占2个比特位, 所以用还是01

最后合起来二进制是 11010101 ,十进制是213

原文地址:https://www.cnblogs.com/or2-/p/7406647.html