Binary 二进制格式,是否存在按位操作?例如<&书信电报;16#7F、16#FF>&燃气轮机;bsl 1

Binary 二进制格式,是否存在按位操作?例如<&书信电报;16#7F、16#FF>&燃气轮机;bsl 1,binary,erlang,xor,Binary,Erlang,Xor,在erlang中,存在对整数进行位运算的操作,例如: 1> 127 bsl 1. 254 还可以将整数打包成字节序列 << 16#7F, 16#FF >> 是否可能,或者是否有任何运算符或BIF可以对二进制压缩数据执行位操作(例如AND、or、XOR、SHL、SHR) 例如(如果bsl在二进制软件包上工作-它没有): 使用Erlang的无界整数大小,我们可以实现以下目标: 1> Bits = <<16#0FFFFFFF:(4*8)>>. &l

在erlang中,存在对整数进行位运算的操作,例如:

1>  127 bsl 1.
254
还可以将整数打包成字节序列

<< 16#7F, 16#FF >>
是否可能,或者是否有任何运算符或BIF可以对二进制压缩数据执行位操作(例如AND、or、XOR、SHL、SHR)

例如(如果bsl在二进制软件包上工作-它没有):


使用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
1>位=。
2> 大小(位)。
4.
3> 大小=大小(位)*8。
32
4> =位。
5> Num。
268435455
6> Num2=numbsl4。
4294967280
7> 位2=。
8> =位2。
9> A。
255
10> D。
240
如我们所料

请注意,在我的解决方案中,通过向二进制文件中存储的初始字符串添加4'0(16#0F…前4个位置为0),我预测了需要多少移位(4)

我不知道如果我必须转移到二进制容器的“边界”之外,我想你会选择2^Size-1。请尝试以下方法:

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

谢谢,太好了!此外,还可以对旋转进行修改:brol(Bin,Shift)->=Bin,干杯
bbsl(Bin,Shift) -> <<_:Shift,Rest/bits>> = Bin, <<Rest/bits,0:Shift>>.