Problem mit std::memcpy
-
Hallo,
ich wollte folgenden Code bei mir zum laufen bringen. Ich weis, dass ich das auch einfacher ohne memcpy schreiben kann. Mir geht es aber darum zu verstehen, warum der Code unten nicht funktioniert (auf meinem System: unsigned int = 32bit, unsigned long long = 64 bit, little endian). Meiner Meinung nach sollten die 4 oberen byte von i64 in high kopiert werden und in high sollte dann 2 stehen. Tatsächlich steht in high aber irgend eine Abfolge von bits (1967614884). Sieht jemand, wo mein Fehler liegt?unsigned long long i64 = 0x0000000200000000ULL; unsigned int high; std::memcpy( &high, &i64 + sizeof(unsigned int), sizeof(unsigned int) );
-
Zeiger werden bei der Addition mit
intelementweise erhöht, nicht Byte-weise.
Es müsste also heißen:reinterpret_cast<char *>(&i64) + sizeof(unsigned int)
-
Nur der Vollstaendigkeit wegen: Der Weg ueber
unionist wohl besser.
-
knivil schrieb:
Nur der Vollstaendigkeit wegen: Der Weg ueber
unionist wohl besser.Und undefiniert ...
Grüssli
-
TyRoXx schrieb:
Zeiger werden bei der Addition mit
intelementweise erhöht, nicht Byte-weise.
Es müsste also heißen:reinterpret_cast<char *>(&i64) + sizeof(unsigned int)Warum nicht gleich
reinterpret_cast<unsigned int*>(&i64) + 1?
-
@wxSkip
Das ist ne gute Frage. Welche Variante würdest du denn wählen? (abgesehen davon, dass man einfach (unsigned int)(i64>>32) schreiben könnte)
-
ChubAKA schrieb:
@wxSkip
Das ist ne gute Frage. Welche Variante würdest du denn wählen? (abgesehen davon, dass man einfach (unsigned int)(i64>>32) schreiben könnte)Wenn ich eine andere Vorschlage, welche würde ich dann wohl wählen?

-
Dravere schrieb:
knivil schrieb:
Nur der Vollstaendigkeit wegen: Der Weg ueber
unionist wohl besser.Und undefiniert ...
Ich hätte da ja ein "Oder" spendiert (statt eines "Und").
