Ich stehe gerade auf dem Schlauch. Ich konvertiere eine 32-Bit-Ganzzahl zu einer 64-Bit-Ganzzahl und umgekehrt. Die oberen 32 Bits sind mir dabei wumpe. Der Clou ist, dass die Zahl bei der Konvertierung zu 32 Bits durch XOR „gesalzen“ und bei der Rückkonvertierung zu 64 Bits wieder „entsalzt“ wird – und der Wert, mit dem das geschieht, ist ein enum. Und das ist dann auch der Punkt, an dem ich irgendwie die Orientierung verliere …:
Code: Alles auswählen
enum { Salt = 0xEF56F3C9 };
unsigned long _64to32(unsigned long long p_) {
return static_cast<unsigned long>(p_ ^ Salt);
}
unsigned long long _32to64(unsigned long p_) {
return static_cast<unsigned long long>(p_) ^ static_cast<unsigned long long>(Salt);
}
Code: Alles auswählen
(_64to32) warning C4310: cast truncates constant value
(_32to64) warning C4309: 'static_cast' : truncation of constant value
Gruß, Ky
P.S.: Das Ganze spielt sich in VS 2008 im x64-Modus ab.