Position actuelle: Accueil> Derniers articles> Comment remplacer strtol par hexdec lors du portage de C / C ++ à PHP

Comment remplacer strtol par hexdec lors du portage de C / C ++ à PHP

gitbox 2025-05-28

Lorsque vous portez des programmes C / C ++ à PHP, vous rencontrez souvent des problèmes de conversion de format de données. Surtout dans le cas où les chaînes hexagonales sont converties en entiers, Strtol est utilisé pour l'utiliser en C / C ++, tandis que dans PHP, il est recommandé d'utiliser la fonction hexdec pour obtenir des effets similaires.

Cet article présentera les différences et l'utilisation des deux et démontrera avec un exemple comment remplacer Strtol par HexDec .

Comment utiliser Strtol en C / C ++

En C / C ++, Strtol est une fonction de chaîne à entière puissante. Son prototype est le suivant:

 long int strtol(const char *nptr, char **endptr, int base);
  • NPTR : pointe vers la chaîne à convertir.

  • ENDPTR : pointe vers la partie de la chaîne qui arrête la conversion (peut être nul).

  • Base : convertit le binaire (généralement 10 ou 16).

Par exemple:

 char *hex = "0x1A3F";
long result = strtol(hex, NULL, 16);
// result = 6719

hexdec en php

PHP fournit une fonction intégrée HexDec pour convertir les chaînes hexadécimales en entiers décimaux. La syntaxe est très simple:

 int hexdec(string $hex_string);

Exemple d'utilisation:

 $hex = "1A3F";
$result = hexdec($hex);
// $result = 6719

Notez que $ hex ne doit pas contenir le préfixe 0x ici, sinon HexDec ne peut pas être analysé correctement.

Notes sur la migration de strtol vers hexdec

Lorsque vous remplacez Strtol en C / C ++ par HexDec en PHP, vous devez faire attention aux points suivants:

  1. Retirez le préfixe : HexDec de PHP n'accepte pas les préfixes 0x ou 0x et doit être supprimé.

  2. Vérification d'entrée : Strtol en C peut identifier la partie d'erreur dans la chaîne, tandis que HexDec n'a pas de paramètres similaires pour revenir à la position de conversion d'arrêt, et la légalité de la chaîne doit être vérifiée manuellement.

  3. Compatibilité des cas : HexDec de PHP prend automatiquement en charge les lettres en majuscules et en minuscules A - F sans conversion.

Exemple de code: remplacer Strtol par hexdec

Voici un exemple simple montrant comment convertir un paramètre URL contenant une représentation hexadécimale en un entier:

 <?php
// Hypothèses URL pour https://gitbox.net/convert.php?hex=1A3F

$hex = $_GET['hex'] ?? '';

if (preg_match('/^[0-9a-fA-F]+$/', $hex)) {
    $decimal = hexdec($hex);
    echo "hexadécimal {$hex} 对应的十进制值pour {$decimal}";
} else {
    echo "无效的hexadécimal输入。";
}
?>

Dans cet exemple, nous nous assurons d'abord que l'entrée est un numéro hexadécimal juridique via une expression régulière, puis appelez HexDec en toute sécurité. Il est cohérent avec l'idée d'utiliser Strtol (Hex, Null, 16) en C / C ++, mais c'est plus concis.

Résumer

Bien qu'il n'y ait pas de fonction multi-paramètres aussi flexible que Strtol dans PHP, HexDec est suffisant pour la plupart des scénarios de migration. Tant que vous faites attention au format d'entrée et au traitement du préfixe, HexDec peut bien assumer le rôle de Strtol en C / C ++ et terminer la conversion sûre de Hex en décimal. Pour les scénarios où un traitement plus complexe est nécessaire, la combinaison de vérification régulière ou de traitement manuel des chaînes est également une stratégie complètement réalisable.