Erlang學習筆記(七)二進位制型與位語法
在大多數情況下,二進位制型裡的位數都會是8的整數倍,因此對應一個字串。如果位數不是8的整數倍,就稱這段資料為位串,所以說位串的時候強調資料裡的位數不是8的整數倍。
1. 二進位制
二進位制型的編寫和列印形式是雙小於號和雙大於號之間的一列整數或字串
<<5, 10, 20>>.
%<<5,10,20>>
<<"hello">>.
%<<"hello">>
<<65,66,67>>.
%<<"ABC">>
在二進位制中使用整數時,它必須屬於0至255這個範圍。
和字串類似,如果某個二進位制型的內容是可列印的字串,shell就會將這個二進位制型列印成字串,否則就列印成一列整數。
2. 操作二進位制
list_to_binary(L)->B %把io列表(iolist)L裡的素有元素壓扁後形成的二進位制
split_binary(Bin,Pos)->{Bin1,Bin2} %在pos處把二進位制型Bin一分為二
term_to_binary(Term)->Bin %把任何erlang資料型別轉換成二進位制型。
binary_to_term(Bin)->Term %將二進位制型轉回來
byte_size(Bin)->Size %返回二進位制型的位元組數
3. 位語法
位語法是一種表示法,用於從二進位制資料裡提取或者加入單獨的位或者串。
開發位語法是為了進行協議程式設計,以及生產操作二進位制資料的高效程式碼。
如果是8的整倍,型別就是binary。如果不是,就是bitstring
M = <<X:N1,Y:N2,Z:N3>> %XYZ都是變數,N1N2N3都是各自所佔的位數。
<<X:N1,Y:N2,Z:N3>> = M %讀取M中的資料到XYZ,跟上面的完全想法的操作。
<<>>
<<E1,E2,...,En>>
單個Ei元素可以有4種形式:
Ei = Value |
Value:Size |
Value/TypeSpecifierList |
Value:Size/TypeSpecifierList
%TypeSpecifierList 型別指定列表 End-Sign-Type-Unit
%End可以是big| little | native
%Sign可以是signed|unsigned Type可以是integer|float|binary|bytes|bitstring|bits|utf8|utf16|utf32預設值是integer
%Unit的寫法是unit:1|2|...256
4. 位串:處理位級資料
對位串的模式匹配是位級操作,這樣我們就能在單次操作裡打包和解包位的序列。這對編寫需要操作位級資料的程式碼來說極其有用,例如沒有按照8位邊界對齊的資料或者可變長度資料,它們的資料長度用位而不是自己來表示。
在Erlang裡,最小可定址的儲存單元是1位,位串裡各個獨立的位序列可以直接訪問,無需任何移位和掩碼的操作。
位推導的二級制型的關係就像列表推導和列表的關係一樣。列表推導遍歷列表並返回列表,位推導遍歷二進位制型並生成列表或者二進位制型。
位推導:
[ X || <<X:N>> <= B]. %列表
<< <<X>> || <<X:N>> <= B >>. %位串
相關文章
- HWS二進位制筆記筆記
- JavaScript 八進位制與二進位制表示法JavaScript
- JavaScript八進位制與二進位制表示法JavaScript
- 二進位制與二進位制運算
- JavaScript 二進位制、八進位制與十六進位制JavaScript
- ROP【二進位制學習】
- Solidity語言學習筆記————45、應用二進位制介面(ABI)說明Solid筆記
- 二進位制、十進位制與十六進位制相互轉化
- 進位制詳解:二進位制、八進位制和十六進位制
- 進位制與二進位制及相關轉換
- java之二進位制與資料型別Java資料型別
- 二進位制安全_C語言中資料型別C語言資料型別
- 二進位制,八進位制,十進位制,十六進位制的相互轉換
- 【進位制轉換】二進位制、十六進位制、十進位制、八進位制對應關係
- 十進位制——二 (八、十六 )進位制
- 計算機基礎進位制轉換(二進位制、八進位制、十進位制、十六進位制)計算機
- java中二進位制、八進位制、十進位制、十六進位制的轉換Java
- 二進位制,八進位制,十進位制,十六進位制之間的轉換
- 二進位制
- (二進位制)
- C語言中printf打出2進位制與16進位制數C語言
- JAVA 二進位制,八進位制,十六進位制,十進位制間進行相互轉換Java
- 二進位制轉十進位制快速方法
- [計算機基礎] 計算機進位制轉換:二進位制、八進位制、十進位制、十六進位制計算機
- 進位制之間的轉換之“十六進位制 轉 十進位制 轉 二進位制 方案”
- 一看就懂二進位制、八進位制、十六進位制數轉換十進位制
- 什麼是二進位制?二進位制如何轉換?
- C語言學習筆記——位運算C語言筆記
- JavaScript十進位制轉換為二進位制JavaScript
- 十進位制轉二進位制推導(草稿)
- C語言02-常量、二進位制、資料型別C語言資料型別
- Go語言實現十進位制轉換成二、八、十六進位制Go
- Cocoapods 二進位制
- 04 二進位制
- leetcode -- 二進位制LeetCode
- 整數轉化成八進位制、十六進位制、二進位制,以及轉回
- 演算法學習之二進位制的妙用演算法
- 【MySQL解惑筆記】Mysql5.7.x無法開啟二進位制日誌MySql筆記
- KITTI-二進位制點雲資料集使用筆記筆記