elixir二進位制模式匹配

c3tc3tc3t發表於2017-08-21
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

 

相關文章