2016-12-29 3 views
1

ich einen Byte-Array habe, zum Beispiel (Byte-Array kann mehr oder weniger als 3 Bytes)von Byte letzte Bit

byte[] array = {0b00000011, 0b00111011, 0b01010101} 

Wie kann ich entfernen das letzte Stück des Bytes: 0b 0000011, 0b 0.111.011, 0b weil ich mag, wie diese 11 führen bekommen | 0111011 | 1010101 aber ich habe keine Ahnung, wie man das macht

+1

Zuerst 0xXXXXXX hexadezimale Notation. Verwenden Sie stattdessen 0bXXXXX. Zweitens sollten Sie bitweise Operatoren verwenden: & (1010 & 1100 -> 1000), | (1010 | 1100 -> 1110),^(1010^1100 -> 0110) und binäre Verschiebungen (>> und <<: 10101100>> 2 -> 00101011). –

+0

So behält 'myByte & 0b01111111' nur die letzten 7 Bits von' myByte'. Das Ergebnis kann ein 'int' sein, wenn ja, wirf es einfach zurück auf ein Byte:' (Byte) (myByte & 0b01111111) ' –

+0

Sie wollen Ihr Ergebnis in einem' int', einem 'String' oder was? –

Antwort

0

Es ist nicht wirklich klar, aber vielleicht verstehe ich: Sie wollen alle nicht-signifikanten Bits vor einem Byte entfernen. Sie könnten dafür eine Zeichenfolge verwenden. Pseudo-Code in:

take a byte value N (or word or whatever) 
prepare an empty string ST 
while N<>0 
    if (N & 1) 
    then ST = "1"+ST 
    else ST = "0"+ST 
    N = N >> 1 
end 

Nun ist die Zeichenfolge ST enthält, was Sie wollen (wenn ist, dass Sie wollen ...).

0

Wenn Sie führende Nullen beibehalten möchten, können Sie dies tun.

StringBuilder sb = new StringBuilder(); 
String sep = ""; 
for (byte b : bytes) { 
    sb.append(sep); 
    // set the top byte bit to 0b1000_0000 and remove it from the String 
    sb.append(Integer.toBinaryString(0x80 | (b & 0x7F)).substring(1)); 
    sep = '|'; 
} 
String s = sb.toString(); 
0
byte[] array = { 0b00000011, 0b00111011, 0b01010101 }; 
    int result = 0; 
    for (byte currentByte : array) { 
     result <<= 7; // shift 
     result |= currentByte & 0b0111_1111; 
    } 
    System.out.println(Integer.toBinaryString(result)); 

Diese Drucke:

1101110111010101 

Wenn Ihr Array mehr als 4 Byte ist, ein unerkannter int Überlauf wahrscheinlich ist.