Heim > Backend-Entwicklung > C++ > Hauptteil

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

Linda Hamilton
Freigeben: 2024-11-10 19:30:02
Original
839 Leute haben es durchsucht

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;
    // ...
  }
}
Nach dem Login kopieren

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);
Nach dem Login kopieren

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;
Nach dem Login kopieren

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;
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage