Binary pattern matching với Elixir
TIL
589
elixir
32
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

39 bài viết.
336 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
39 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 1 năm trước
39 9
White
37 6
Làm thế nào để chỉ với một đoạn text vài trăm ký tự, bạn có thể làm ngốn vài gigabyte bộ nhớ và từ chối dịch vụ của một hệ thống dùng XML? _____ ...
Cẩm Huỳnh viết 4 tháng trước
37 6
White
34 25
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 12 tháng trước
34 25
Bài viết liên quan
White
8 6
Chưa xem phần 2? Xem (Link) Trong bài viết này tôi giới thiệu cho các bạn về khái niệm function arity, một cách gọi mĩ miều của số lượng argument ...
Lơi Rệ viết gần 3 năm trước
8 6
White
0 2
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 27 ngày trước
0 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


White
{{userFollowed ? 'Following' : 'Follow'}}
39 bài viết.
336 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á!