Implizite Typisierung in C (Konvertierung von 32-bit unsigned in 8 bit u int)
Meine Frage sieht viel wie
Wie bewahren Sie eine 64-bit-Ganzzahl in zwei 32-bit-Ganzzahlen konvertieren und wieder zurück
(Ich habe eine vorzeichenlose 32 bit-ich brauche, um in die 4 unsigned 8-bit-Variablen in C)
aber
Meine Frage ist ob diese:
uint8_t a;
uint32_t b;
a = b;
garantiert, dass eine gefüllt mit acht niedrigstwertigen bits, anstatt der acht leftmost bits?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja. Entweder dieses:
Oder so:
Ersten Beispiel wird nicht abhängen, die auf der Plattform endian Typ, die zweite hat.
Ich weiß nicht, was du meinst, von ganz rechts und ganz Links (endianness?) aber C garantiert, dass
a
enthält die 8 unteren Ordnung (least significant) bitsb
. Das heißt, die Zuordnung logisch äquivalent zu:Vom C-standard, es ist garantiert, dass
a == b % (max_of_uint8_t + 1)
, D. H. die am wenigsten signifikanten 8 bits. In §6.3.1.3 (Signed und unsigned Integer):Verwenden
a = b & 0xff
wenn Sie brauchen, um sicher zu sein.Könnte man auf die EU-Erklärung. Wenn Sie garantieren können den Prozessor/die Quelle der Daten nicht ändern, ich denke, man kann davon ausgehen,'endianness'