Ich möchte Bytes in int in Java konvertieren. Ich möchte annehmen, dass Bytes vorzeichenlose Bytes sind. Angenommen, wenn
%Vor%r sollte 255 nicht -1 in Dezimal sein.
Dann möchte ich Int-Wert von 3 Bytes erstellen. Angenommen, wenn
%Vor% Dann sollte r 0x000FFFFF
sein. Byte b1 wird an der höheren 3. Position platziert und Byte b3 wird an der unteren 1. Position im int-Wert platziert. Auch mein b1 wird von 0x00 bis 0x0F reichen, und andere Bytes werden von 0x00
bis 0xFF
sein, wobei angenommen wird, dass Bytes nicht vorzeichenbehaftet sind. Wenn Byte b1 größer als 0x0F ist, extrahiere ich nur die untersten 4 Bits. Kurz gesagt möchte ich Int aus 3 Bytes extrahieren, aber nur 20 Bits von 3 Bytes verwenden. (insgesamt 16 Bits von b2 und b3 und 4 untersten Bits von b1). int r muss positiv sein, da wir aus 3 Bytes erstellen und eine vorzeichenlose Natur von Bytes annehmen.
Ich würde annehmen, dass Sie vorzeichenlose Bytewerte wollen
%Vor%Jedes Byte muss maskiert und zu den richtigen Bits verschoben werden.
Dies ist mit Bitshift-Operatoren und binären AND ziemlich einfach. Sie möchten nur die unteren 4 Bits von b1 verwenden, das ist genau das, was b1 & 0x0F
tut. Der ganze Rest verschiebt die Bits zu verschiedenen Positionen
BEARBEITEN wie @harold darauf hingewiesen hat, hätte die vorherige Lösung (ohne die 0xFF-Maske auf den unteren Bytes) zu Anomalien aufgrund der Zeichenerweiterung geführt ...
EDIT2 Gosh, ich bekomme immer die Nase vom Operator-Vorrang, wenn es um diese geht ...
Empfohlener Wert:
Ich habe einige Antworten verglichen, da ich neugierig war, welcher der schnellste war.
Scheint so, als ob Bohemian's Methode am schnellsten ist, aber ich kann nicht erklären, warum es im ersten Lauf um 11% langsamer ist.
PS .: Ich habe die Antworten nicht auf Richtigkeit überprüft.
Hier der Code:
%Vor%AUSGABE
%Vor%Tags und Links java bit-manipulation