Xóa bài viết
Bạn có chắc chắn muốn xóa bài viết này không ?
Xóa bình luận
Bạn có chắc chắn muốn xóa bình luận này không ?
Binary pattern matching với Elixir
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 bitstrings
và binary
<<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

{{ comment.user.name }}
Bỏ hay
Hay

Cùng một tác giả

69
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...

49
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 ...

47
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...
Bài viết liên quan

0
5
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 ...

4
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...

24
1
Toán tử XOR có tính chất: + A XOR A = 0 + 0 XOR A = A Với tính chất này, có thể cài đặt bài toán sau với độ phức tạp O(N) về runtime, và với O(1)...