2015-05-01 75 views
2

我無法理解erlang中的位打包。Erlang位打包的輸出

假設:

R=4G=6B=8

那麼爲什麼輸出這樣的:

<< R:5,G:5,B:6 >>

輸出:<<33,136>>

我不明白。任何人都可以解釋嗎?

回答

3
<< R:5,G:5,B:6 >> 

這條記錄我們分配了5,5和6位,結果是一個2字節的二進制序列。爲了更好地理解爲什麼發生這種情況,請啓動逆向轉換變換的數字33和136以二進制形式:

integer_to_list(33,2). 
integer_to_list(136,2). 

「100001」 「10001000」

我們得到以下行。由於二進制序列的每個段都是8的倍數,因此向左側補充33個零的顯示。

L2=lists:append("00",lists:append(integer_to_list(33,2),integer_to_list(136,2))). 

「0010000110001000」

繼續執行的解碼。第三個參數表明位

V1 = list_to_integer(lists:sublist(L2,5),2). 
V2 = list_to_integer(lists:sublist(L2,6,5),2). 
V3 = list_to_integer(lists:sublist(L2,11,6),2). 

對不起,我的英語的人數,希望我解釋清楚。

+0

非常感謝您的回覆,它明確表示並回答了問題。 – user3404572