175 Bit Feld auslesen und manipulieren
-
Hallo!
Ich habe gerade ein kleines Problem was ich nicht lösen kann. Und zwar bekomme ich über einen Socket Daten geschickt die 248 Bit lang sind. Mitten in diesen Bits befinden sich zwei jeweils 111Bit große Teilstücke. Genau diese muss ich auslesen und später mit anderen Daten XORen.
Also das sieht so aus:
13 Bits | 111Bits | 10Bits | 111Bits | 3Bit unwichtig| auslesen | unwichtig | auslesen | PaddingDie 2x 111Bits brauche ich um diese dann später mit 222 zusammenhängenden Bits zur XORen und wieder in Daten gesplittet einzufügen.
Ich versteh nur nicht wie ich an die Daten rankomme. Vor allem weil die Daten auch noch über Bytegrenzen hinweg gehen.

Ich dachte erst ein ein Struct mit Bitfeldern, aber das geht ja irgendwie auch nicht. Ich kann mir ja ein struct machen mit 248 bool-Variablen....

Achja... dann gibt es ja wohl noch dieses Big- Little-Endian problem, weil die Daten über UDP gekommen sind. Und wie soll später das XORen funktioniern, bei 222Bit breiten Daten.Ich seh da momentan keine einfache Möglichkeit. Ihr eventuell?
Über hilfreiche Tips wäre ich äußerst dankbar!
Gruß
Thorsten
-
Die Überschrift ist falsch...

-
wenn unsigned char bei dir 8 bits groß ist (ist bei heutigen pcs üblicherweise so), lies die daten in einen std::vector<char>(31). da passen exakt 8 * 31 = 248 bits rein.
auf einzelne bits greifst du dann mit den boolschen operatoren zu, also and, or, xor. um die oberen 3 bits aus einem octet "auszublenden", machst du
v = octet & 31.wahrscheinlich gehts noch einfacher mit std::bitset oder std::vector<bool>, damit kenne ich mich aber nicht so gut aus.
Ikarisan schrieb:
dann gibt es ja wohl noch dieses Big- Little-Endian problem
hä? bei bits gibt es keine endianess, die gibts nur bei datentypen die größer als 1 byte sind.
-
Da man sich bei 222 Byte nicht wirklich um Platzbedarf Gedanken machen muss, würde ich einfach den vector<bool> nehmen. In einer Schleife die Bits aus den Bytes in den vector transferieren und schon kannst du bequem drauf arbeiten.