C++ - Kopie der 32-bit-Ganzzahl in byte-array
Ist es möglich, das kopieren einer 32-bit-Wert in ein array von 8-bit-Zeichen mit einem einzigen Auftrag?
Sagen, ich habe ein byte-array (uint8*) mit dem Inhalt:
01 12 23 45 56 67 89 90
Ist es möglich, kopieren Sie in dieses Feld (durch casts oder sonst was) mit einem einzigen Auftrag?
Kopieren Sie beispielsweise so etwas wie 0x555555, so dass wir am Ende mit:
55 55 55 55 56 67 78 90
- In der Regel, "kopieren" (ob durch Gießen oder
memcpy
) verhält sich unterschiedlich abhängig von der nativen byte-Reihenfolge oder die CPU.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hüten Sie sich vor der Größe der int unter 64-bit-code... können, benötigen Sie ein Daten-Typ, die durchweg 32 bit unter beiden Architekturen, wie
uint32_t
.char a[] = "blahblah"; *((unsigned int*)a) = 0x555555; printf("%x", a);
werde ich etwas sehen, wie 0xffffff55;Können Sie
reinterpret_cast
obwohl Sie wirklich brauchen, zu tragen Stahl-toe-capped boots, während es zu benutzen.Ausgabe:
Können Sie
reinterpret_cast
zu werfen alles in nichts.http://msdn.microsoft.com/en-us/library/e0w9f63b(v=vs. 80).aspx
Können Sie so verwenden:
unsigned long* fake_long = reinterpret_cast<unsigned long*> (char_array);
*fake_long = 0x55555555;
Aber eine solche Lösung kann arbeiten, die auf einer big-endian Maschine. Zu machen, arbeiten, in einer little-endian Maschine (vermutlich wollen Sie), sollten Sie konvertieren endianness Ihre long-Variablen.