2017-11-29 2 views
2

Also habe ich ein Byte-Array, das ein Bitfeld darstellt. Ein Bit 1 an jedem Index eines Byte-Arrays impliziert, dass ich das entsprechende Stück habe und umgekehrt für eine 0. Jetzt muss ich den Bit-Wert von 0 auf 1 ändern, wenn ich das entsprechende Stück habe.Effiziente Möglichkeit, Bits in Byte-Array zu manipulieren, die ein Bitfeld darstellen

Meine Frage ist, ist es besser, wenn ich das Byte-Array in ein int-Array umwandeln und dann den entsprechenden Wert des Array-Index ändern oder ist es einfacher, es in einem Byte-Array zu tun?

Wenn es ersteres ist, wie kann ich das Byte-Array in ein Integer-Array konvertieren? Wenn es das letztere ist, wie ändere ich den Wert des entsprechenden Bytearrays?

+0

Sie können [Bitoperatoren] (https://docs.oracle.com/javase/tutorial/ java/nutsandbolts/op3.html). Es ist nicht notwendig, in eine andere Ganzzahl zu konvertieren. – jrook

+4

Warum verwenden Sie nicht die eingebaute Klasse 'java.util.BitSet'? Es ist genau für diesen Anwendungsfall gedacht. –

+0

@JimGarrison Danke! Ich wusste nichts von seiner Existenz. – tinkuge

Antwort

3

Um zu überprüfen, ob das Bit n wahr ist

boolean get(int n, byte[] bitField) 
{ 
    return (bitField[n >> 3] & 1 << (n & 0x7)) != 0; //or use n/8 and n % 8 
} 

Bit setzen n

void set(int n, byte[] bitField, boolean value) 
{ 
    if(value) 
     bitField[n >> 3] |= 1 << (n & 0x7); 
    else 
     bitField[n >> 3] &= ~(1 << (n & 0x7)); 
} 

Wenn Sie einen BitSet verwenden, ist es ein bisschen

einfacher

Um zu instanziiert

Um zu überprüfen, ob das Bit n wahr ist

bitField.get(n); 

Bit setzen n

bitField.set(n, value); //can also use set(int) and clear(int) instead 
Verwandte Themen