Binary pattern matching với Elixir
TIL
720
elixir
37
White

Cẩm Huỳnh viết ngày 06/03/2017

Binary pattern matching với Elixir

Các kiểu được hỗ trợ trong Elixir binary

  • integer
  • float
  • bits (alias for bitstring)
  • bitstring: Bitstring như trên, chính là bit
  • binary: Binary được hiểu là byte.
  • bytes (alias for binary)
  • utf8
  • utf16
  • utf32

Pattern matching một chuỗi binary

# Như ta đã biết kí tự A có mã ASCII là 65 với mã nhị phân tương ứng là 01000001
<<a::integer>> = <<"A">>
# => a = 65

# Lấy 3 bits đầu tiên của kí tự A
<<a::size(3), b::bitstring>> = <<"A">>
# => a = 2 b = <<1::size(5)>>

Dùng - để kết các tùy chọn với nhau

Pattern match kí tự A, và match 5 bytes tiếp theo cho biến love đồng thời gán chuỗi binary (bytes) còn lại vào biết rest

<<"I", love::binary-size(5), rest::binary>> = <<"I love Elixir">>
# => love = " love"; rest = " Elixir"

Pattern match biến a với 8 bits (1*8) chuỗi "A"

<<a::size(1)-unit(8)>> = <<"A">>
# => a = 65

Chú ý là khi dùng unit (Integer Literal unit), biến a sẽ được gán về kiểu int, nó tương tự với việc bạn khai báo dòng lệnh sau

<<a::integer>> = <<"A">>
# => a = 65

Dùng alias bits/bytes để thay cho bitstringsbinary

<<a::6-bits, b::2-bits>> = <<1>>
# => a = 000000 b = 01
# Parse nhanh chuỗi UUID với binary pattern matching
uuid = "3a20655a-0052-11e7-93ae-92361f002671"
<<part1::8-bytes, ?-, 
  part2::4-bytes, ?-,
  part3::4-bytes, ?-,
  part4::4-bytes, ?-,
  part5::12-bytes>> = uuid

hqc 04-03-2017

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Cẩm Huỳnh

47 bài viết.
454 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
66 5
image cover]imgcover] “Make it work, make it right, make it fast.” Bạn vừa viết xong một ứng dụng web :tada:. Mọi thứ chạy ổn. Code cũng đã được...
Cẩm Huỳnh viết 10 tháng trước
66 5
White
47 26
Vừa rồi mình vừa tiết kiệm được $5 mỗi tháng sau khi migrate cái (Link) từ Digital Ocean sang Heroku Free Dyno. (Ảnh) Kết quả thật mĩ mãn vì hầu ...
Cẩm Huỳnh viết 2 năm trước
47 26
White
44 9
(Ảnh) Vì sao lại là Bật Đèn? Ai từng đọc qua Tắt Đèn hẳn đã biết tác phẩm được kết thúc bằng tình huống: Buông tay, chị vội choàng dậy, mở cửa...
Cẩm Huỳnh viết hơn 2 năm trước
44 9
Bài viết liên quan
White
0 4
fCC: Technical Documentation Page note So I have finished the HTML part of this exercise and I want to come here to lament about the lengthy HTML ...
HungHayHo viết 1 năm trước
0 4
White
2 0
I used Spring boot, Hibernate few times back then at University, I'v started using it again recently. In this (Link), I want to check how Spring J...
Rey viết 7 tháng trước
2 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
47 bài viết.
454 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!