"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment puis-je convertir en toute sécurité un pointeur en entier sur des machines 64 bits ?

Comment puis-je convertir en toute sécurité un pointeur en entier sur des machines 64 bits ?

Publié le 2024-12-23
Parcourir:858

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

Conversion d'un pointeur en entier : revisité pour les machines 64 bits

En C/C, un piège potentiel lorsqu'on traite du 64-Bit Les machines à bits surviennent lors de la manipulation des pointeurs. Les techniques de conversion traditionnelles, telles que celle présentée ci-dessous, peuvent entraîner des erreurs de précision :

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

Solution avec des techniques de diffusion mises à jour

Pour résoudre ce problème et garantir une compatibilité transparente sur les systèmes 32 bits et 64 bits, une approche C moderne est recommandée :

#include 

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

Choisir le type de données correct

Lors du stockage d'un pointeur sous forme d'entier, il est crucial de sélectionner le type de données approprié. A cet effet, le type uintptr_t est le plus adapté.

// C  11
std::uintptr_t i;

// C  03
extern "C" {
#include 
}
uintptr_t i;

// C99
#include 
uintptr_t i;

Employer le bon opérateur de diffusion

En C , différents types de conversions existent. Pour ce scénario spécifique, reinterpret_cast est le choix le plus approprié.

// C  11
auto i = reinterpret_cast<:uintptr_t>(p);

// C  03
uintptr_t i = reinterpret_cast(p);

// C
uintptr_t i = (uintptr_t)p;
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3