2008-12-24 73 views
8

Erlang中,有按位操作來對整數進行操作,例如:二進制格式,是否存在按位運算?例如。 << 16#7F,16個#FF >> BSL 1

1> 127 bsl 1. 
254 

也有打包整數成一個字節序列的能力

<< 16#7F, 16#FF >>

是有可能,還是有可對二進制壓縮數據進行按位運算(如AND,OR,XOR,SHL,SHR)的任何運營商或內建函數?

例如(如果BSL製作二進制包 - 它不會):

1> << 16#7F, 16#FF >> bsl 1. 
<< 255, 254 >>

回答

6

嘗試這個辦法:

bbsl(Bin,Shift) -> <<_:Shift,Rest/bits>> = Bin, <<Rest/bits,0:Shift>>. 
+0

謝謝,這是偉大的! 此外,還可以修改以進行旋轉: Brier(Bin,Shift) - ><< U:Shift,Rest/bits >> = Bin,<< Rest/bits,U:Shift >> – 2008-12-31 07:44:15

0

使用Erlang的無界整數大小,我們可以做到這一點:

1> Bits = <<16#0FFFFFFF:(4*8)>>. 
<<15,255,255,255>> 

2> size(Bits). 
4 

3> Size=size(Bits)*8. 
32 

4> <<Num:Size>> = Bits. 
<<15,255,255,255>> 

5> Num. 
268435455 

6> Num2 = Num bsl 4. 
4294967280 

7> Bits2 = <<Num2:Size>>. 
<<"ÿÿÿð">> 

8> <<A:8,B:8,C:8,D:8>>=Bits2. 
<<"ÿÿÿð">> 

9> A. 
255 

10> D. 
240 

如我們預期。

注意,在我的解決方案我期待加入4「0'存儲在二進制的初始字符串多少班,我需要(4)(16#0F ...第4位爲0)

不知道如果我不得不跨越二進制容器的「邊界」,我將如何處理它,我想你會和2^Size-1一起。

相關問題