Ich arbeite mit C und ich versuche herauszufinden, wie Sie eine Reihe von Bits in einer 32-Bit-Ganzzahl ohne Vorzeichen ändern.Manuelles Ändern einer Gruppe von Bytes in einem unsigned int
Zum Beispiel, wenn ich
int a = 17212403u;
In binären haben, das wird 1000001101010001111110011
. Wenn ich nun diese Bits, die im Little-Endian-Format angeordnet sind, so beschriftete, dass das Bit ganz rechts die Einsen darstellt, dann sind die Zweien rechts, usw., wie kann ich eine Gruppe von Bits manuell ändern?
Angenommen, ich wollte die Bits so ändern, dass das 11. bis 15. Bit den Dezimalwert 17 hat. Wie wäre das möglich?
Ich dachte an diesen Bereich bekommen, indem sie als solche zu tun:
unsigned int range = (a << (sizeof(a) * 8) - 14) >> (28)
Aber ich bin nicht sicher, wo von nun an weitergehen.
'int a = 17212403u;' weist einer _signed_ Variablen einen Wert _unsigned_ zu. Sicherlich ist es viel weniger problematisch, Verschiebungen mit vorzeichenlosen Variablen und Konstanten zu machen. Recommend 'unsigned a = 17212403u;' – chux
17 ist 10001B. Bit 11-15 ist auch 5 Bit, also wird es passen. Zuerst erzwingen Sie diese Bits durch AND-Verknüpfung mit einer Maske von NOT (11111B << 11). Dann verschiebe die 17 bis 11 Stellen, und ODER es ein. –
Little-und Big-Endian gelten nicht für Bit "bestellen". Da Bits nicht einzeln adressierbar sind, gibt es kein Konzept für eine niedrigere Adresse, auf die man sich berufen kann. Aber es ist erwähnenswert, dass Little-Endian * Byte * Reihenfolge bedeutet, dass das "am weitesten links" Byte (das mit der niedrigsten Adresse) ist das Ende niedriger Ordnung, das ist das Gegenteil von dem, was Sie denken, "Little-Endian" bedeutet . – rici