Heim  >  Artikel  >  Backend-Entwicklung  >  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?

Linda Hamilton
Linda HamiltonOriginal
2024-11-10 19:30:02823Durchsuche

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

Umwandeln eines Zeigers in eine Ganzzahl: Überarbeitet für 64-Bit-Maschinen

In C/C eine potenzielle Gefahr beim Umgang mit 64-Bit-Maschinen Bitmaschinen entstehen beim Umgang mit Zeigern. Herkömmliche Konvertierungstechniken, wie die unten gezeigte, können zu Präzisionsfehlern führen:

void function(MESSAGE_ID id, void* param) {
  if (id == FOO) {
    int real_param = (int)param;
    // ...
  }
}

Lösung mit aktualisierten Gusstechniken

Um dieses Problem zu beheben und eine nahtlose Herstellung zu gewährleisten Kompatibilität sowohl auf 32-Bit- als auch auf 64-Bit-Systemen wird ein moderner C-Ansatz empfohlen:

#include <cstdint>

void *p;
auto i = reinterpret_cast<std::uintptr_t>(p);

Auswahl des richtigen Datentyps

Beim Speichern eines Zeigers als Da es sich um eine Ganzzahl handelt, ist die Auswahl des geeigneten Datentyps von entscheidender Bedeutung. Für diesen Zweck ist der Typ uintptr_t am besten geeignet.

// C++11
std::uintptr_t i;

// C++03
extern "C" {
#include <stdint.h>
}
uintptr_t i;

// C99
#include <stdint.h>
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<std::uintptr_t>(p);

// C++03
uintptr_t i = reinterpret_cast<uintptr_t>(p);

// C
uintptr_t i = (uintptr_t)p;

Das obige ist der detaillierte Inhalt vonWie kann ich einen Zeiger auf 64-Bit-Maschinen sicher in eine Ganzzahl umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn