Ich habe ein Byte-Array der Länge 64. Ich habe eine sequentielle Liste, was die Daten in diesem Byte-Array entspricht. Diese Liste sagt mir die Größe in Bits, die jeder Wert ist. Die meisten Werte sind 8 oder 16 Bits, die einfach analysiert werden können. Etwa in der Mitte der Liste bekomme ich eine Länge von 12 Bit oder 5 Bit. Was ist der beste Weg, um diese zu durchlaufen und die Bits herauszuziehen, die ich brauche.Split-Byte-Array in Bit-Arrays
2
A
Antwort
1
Der folgende Code sollte n Bits aus einem Datenpuffer, der als uint[]
gespeichert ist, extrahieren. Ich habe es nicht getestet, also caveat lector.
uint GetBits(uint[] data, ref uint pos, uint n) {
uint a = pos/32;
uint off = pos%32;
uint mask = (1 << n) - 1;
pos += n;
return (data[a] << off)&mask | (data[a + 1] >> (32 - off))&mask;
}
beachten, dass es Little-Endian-Speicher einnimmt, so dass nicht ausgerichtete Werte aus dem hohen Bits eines Wortes in den niedrigen Bits der nächsten fließen.
### und der Code? – nawfal
Haben Sie ein Byte-Array mit Daten und möchten es in 5/8/12/16 Bit Chunks nach einem anderen Array teilen? Split zu einem Array von Ushort/Uint? Oder was? – erikH
@erikH - die Größe der Anzahl der Bits ist unterschiedlich in den 2 Dateien, die ich betrachte, aber sie sind in der Kopfzeile definiert. Auf diesen Header folgen dann die Daten. Um die Daten zu lesen, kann ich den Kopf betrachten und durch die Referenz gehen, wenn das Sinn macht. Wie auch immer, nur versuchen, herauszufinden, der beste Ansatz, um dies in C# zu bewältigen. – poco