Boolean in Byte packen

  • 3 Antworten
  • Neuester Beitrag
Diskutiere Boolean in Byte packen im Android App Entwicklung im Bereich Betriebssysteme & Apps.
Z

zulu23

Neues Mitglied
Hallo zusammen,

Irgendwie habe ich einen Knopf, ich würde gerne diverse Boolsche Werte(true/false) in ein Byte packen und dieses dann übers Netzwerk versenden und auf der anderen seite das Byte wieder in die 8 Boolschen werte auftrennen...nun aber leider habe ich keinen Plan wie ich das hinbekomme.:confused:
Hat vielleicht wer von euch eine Idee wie ich das elegant lösen könnte?:sad:

Besten dank für eure Hilfe!

Gruss

zulu23
 
Z

Zoopa

Stammgast
Einen leichten und eleganten Weg kenne ich nicht. Mit Bit-Operationen kann man das zwar machen, aber allzu leserlich ist das dann auch nicht mehr.

Code:
public static byte booleansToByte(boolean[] myBooleans) {
    byte result = 0;

    //Schleife funktioniert nur wie gewollt, wenn bools.length = 8
    for(int i = 0; i < myBooleans.length; i++) {
        result = (byte) ((result << 1) + (myBooleans[i] ? 1 : 0));
    }

    return result;
}

public static boolean[] byteToBooleans(byte myByte) {
    boolean[] myBooleans = new boolean[8];

    for(int i = 0; i < 8; i++) {
        myBooleans[i] = (myByte << i & 0x80) == 0x80;
    }

    return myBooleans;
}
Was ist der Grund, warum du das so machen willst? Möglichst wenig Daten übertragen?

Wenn das nicht der Grund ist, kannst du nämlich zum Beispiel auch den DataOutputStream verwenden, der hat eine Methode writeBoolean
 
V

vabene1111

Neues Mitglied
Ich bin mir nicht sicher ob dir das hilft aber seit java 7 kannst du mi 0b 00110011 direkt eingeben und das dann am ende wieder auseinander nehmen. Wie genau das in deinem fall nützlich ist weis ich aber nicht :D
 
Z

zulu23

Neues Mitglied
@Zoopa...Danke für dein Beispiel...funktioniert soweit für mich auch da ich immer das Byte mit 8 Boolean füttere...

Ich schicke die Byte's mit hilfe von einem OutputStreamWriter über Ethernet an eine SPS-Steuerung um Bit-Zustände abzufragen und umgekehrt...

gruss
matchef