Binärformat, bitweise Operationen existieren? z.B. << 16 # 7F, 16 # FF >> bsl 1

StackOverflow https://stackoverflow.com/questions/390641

  •  23-08-2019
  •  | 
  •  

Frage

In erlang gibt es bitweise Operationen auf ganze Zahlen zu arbeiten, zum Beispiel:

1>  127 bsl 1.
254

gibt es auch die Möglichkeit, ganze Zahlen in eine Folge von Bytes

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

ist es möglich, oder gibt es Operatoren oder BIFs, die bitweise Operationen durchführen kann (zB AND, OR, XOR, SHL, SHR) auf binäre gepackte Daten?

zum Beispiel (wenn bsl auf Binärpakete gearbeitet - was es nicht):

1>  << 16#7F, 16#FF >> bsl 1.
<< 255, 254 >>
War es hilfreich?

Lösung

Versuchen Sie auf diese Weise:

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

Andere Tipps

Mit Erlang unbegrenzt integer Größen können wir dies erreichen:

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

als wir erwartet haben.

Beachten Sie, dass in meiner Lösung erwartete ich, wie viele Schichten ich brauchen würde (4) durch Zugabe von 4 ‚0'en in die Anfangs Zeichenfolge in dem binären gespeichert (16 # 0F ... die ersten vier Positionen sind 0)

Nicht sicher, wie ich damit umgehen würde, wenn ich über die ‚Grenze‘ des binären Containers verschieben musste, ich denke, man würde nur UND mit 2 ^ Größe-1.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top