Konvertieren eines Zeigers in eine Ganzzahl: Überarbeitet für 64-Bit-Maschinen
In C/C eine potenzielle Falle beim Umgang mit 64-Bit-Maschinen Bitmaschinen entstehen beim Umgang mit Zeigern. Herkömmliche Konvertierungstechniken wie die unten gezeigte können zu Genauigkeitsfehlern führen:
void function(MESSAGE_ID id, void* param) { if (id == FOO) { int real_param = (int)param; // ... } }
Lösung mit aktualisierten Casting-Techniken
Um dieses Problem zu beheben und nahtlose Kompatibilität sowohl auf 32-Bit- als auch auf 64-Bit-Systemen sicherzustellen, wird ein moderner C-Ansatz empfohlen:
#includevoid *p; auto i = reinterpret_cast<:uintptr_t>(p);
Auswahl des richtigen Datentyps
Beim Speichern eines Zeigers als Ganzzahl ist die Auswahl von entscheidender Bedeutung den entsprechenden Datentyp. Für diesen Zweck ist der Typ uintptr_t am besten geeignet.
// C 11 std::uintptr_t i; // C 03 extern "C" { #include} uintptr_t i; // C99 #include uintptr_t i;
Einsatz des richtigen Casting-Operators
In C gibt es verschiedene Arten von Casts. Für dieses spezielle Szenario ist reinterpret_cast die am besten geeignete Wahl.
// C 11 auto i = reinterpret_cast<:uintptr_t>(p); // C 03 uintptr_t i = reinterpret_cast(p); // C uintptr_t i = (uintptr_t)p;
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3