Wie kann ich umwandeln von bits in bytes?

Ich habe ein array von 128 Boolesche Werte repräsentieren bits. Wie kann ich umwandeln diese 128-bit-Darstellungen in 16 bytes?

Beispiel:

Ich habe ein array, dass wie folgt aussieht:

0110001100110000100010111011001011010011010001010001101101001100
1000010000000000001000111111111101000011111001111011111011111001

(Umgerechnet auf 1s und 0s, um präziser)

Ich konvertieren müssen diese bits auf den folgenden byte-array:

99 48 139 178 211 69 27 76 132 0 35 255 67 231 190 249

EDIT: scheint nicht zu funktionieren:

public byte[] ToByteArray() {
    int numBytes = Count / 8;

    if (_bits.Count % 8 != 0) numBytes++;

    byte[] bytes = new byte[numBytes];

    int byteIndex = 0, bitIndex = 0;

    for (int i = 0; i < _bits.Count; i++) {
        if (_bits[i])
            bytes[byteIndex] |= (byte)(1 << bitIndex);

        bitIndex++;
        if (bitIndex == 8) {
            bitIndex = 0;
            byteIndex++;
        }
    }

    return bytes;
}

It-Ausgänge:

198 12 209 77 203 162 216 50 33 0 196 255 194 231 125 159
  • Sie können die Beseitigung der 'byteIndex' variable mithilfe der modulo-operator ( % ). bytes[bitIndex % 8]
  • Ich vermute, Sie wollten integer-division. Modulo verwendet werden, die auf der rechten Seite der Zuweisung. bytes[bitIndex / 8] |= (byte)(1 << (bitIndex % 8))
InformationsquelleAutor David Brown | 2009-04-05
Schreibe einen Kommentar