Heim  >  Artikel  >  Backend-Entwicklung  >  Wie konvertiert man Zeiger für 64-Bit-Kompatibilität sicher in Ganzzahlen?

Wie konvertiert man Zeiger für 64-Bit-Kompatibilität sicher in Ganzzahlen?

Susan Sarandon
Susan SarandonOriginal
2024-11-17 06:06:04841Durchsuche

How to Safely Convert Pointers to Integers for 64-Bit Compatibility?

Zeiger in Ganzzahlen für 64-Bit-Kompatibilität konvertieren

Eine vorhandene Codebasis, die ursprünglich für eine 32-Bit-Maschine entwickelt wurde, verwendet eine Funktion mit ein void*-Argument, das anschließend in einen geeigneten Typ innerhalb der Funktion konvertiert wird:

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

When Beim Anpassen dieses Codes an eine 64-Bit-Umgebung meldet der Compiler einen Fehler:

error: cast from 'void*' to 'int' loses precision

Um dieses Problem zu beheben, ist eine Änderung erforderlich, die auch die Kompatibilität mit 32-Bit-Maschinen gewährleistet.

Lösung

Für einen modernen C-Ansatz, reinterpret_cast dient als idealer Konvertierungsmechanismus. Der Code wird wie folgt umgewandelt:

#include <cstdint>

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

Korrekter Ganzzahltyp für die Zeigerspeicherung

Der empfohlene Datentyp zum Speichern von Zeigern als Ganzzahlen ist uintptr_t oder intptr_t. Diese Typen befinden sich im Verzeichnis Header für C99 und der Standard-Namespace für C 11.

Geeigneter Casting-Operator

In C ist reinterpret_cast der bevorzugte Casting-Mechanismus für diese Konvertierung. Er ersetzt den Cast-Operator im C-Stil, der in C nicht mehr bevorzugt wird.

Das obige ist der detaillierte Inhalt vonWie konvertiert man Zeiger für 64-Bit-Kompatibilität sicher in Ganzzahlen?. 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