„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann ich einen Zeiger auf 64-Bit-Maschinen sicher in eine Ganzzahl umwandeln?

Wie kann ich einen Zeiger auf 64-Bit-Maschinen sicher in eine Ganzzahl umwandeln?

Veröffentlicht am 23.12.2024
Durchsuche:279

How Can I Safely Convert a Pointer to an Integer on 64-Bit Machines?

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:

#include 

void *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;
Neuestes Tutorial Mehr>

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