Beim Portieren von C/C ++ - Programmen in PHP stoßen Sie häufig auf Datenformatprobleme. Insbesondere in dem Fall, in dem Hex -Zeichenfolgen in Ganzzahlen umgewandelt werden, wird Strtol verwendet, um dies in C/C ++ zu verwenden, während in PHP empfohlen wird, die HexDEC -Funktion zu verwenden, um ähnliche Effekte zu erzielen.
In diesem Artikel wird die Unterschiede und die Verwendung der beiden eingeführt und mit einem Beispiel demonstrieren, wie Strtol durch HexDec ersetzt wird.
In C/C ++ ist Strtol eine leistungsstarke Function -Funktion. Sein Prototyp ist wie folgt:
long int strtol(const char *nptr, char **endptr, int base);
NPTR : zeigt auf die zu konvertierte Zeichenfolge.
EndPTR : zeigt auf den Teil der Zeichenfolge, der die Konvertierung stoppt (kann null sein).
Basis : Konvertiert das Binär (normalerweise 10 oder 16).
Zum Beispiel:
char *hex = "0x1A3F";
long result = strtol(hex, NULL, 16);
// result = 6719
PHP bietet eine integrierte Funktion hexdec , um Hex-Saiten in Dezimalzahlen umzuwandeln. Die Syntax ist sehr einfach:
int hexdec(string $hex_string);
Beispiel der Nutzung:
$hex = "1A3F";
$result = hexdec($hex);
// $result = 6719
Beachten Sie, dass $ hex das 0x -Präfix hier nicht enthalten sollte, da ansonsten Hexdec möglicherweise nicht richtig analysiert werden.
Wenn Sie Strtol in C/C ++ durch HexDEC in PHP ersetzen, müssen Sie auf die folgenden Punkte achten:
Entfernen Sie das Präfix : HexDec von PHP akzeptiert nicht 0x oder 0x Präfixe und muss entfernt werden.
Eingabeüberprüfung : Strtol in C kann den Fehlerteil in der Zeichenfolge identifizieren, während HexDec keine ähnlichen Parameter hat, um zur Stop -Conversion -Position zurückzukehren, und die Legalität der Zeichenfolge muss manuell überprüft werden.
Fallkompatibilität : HexDec von PHP unterstützt automatisch Groß- und Kleinbuchstaben A - F ohne Konvertierung.
Hier ist ein einfaches Beispiel, das zeigt, wie ein URL -Parameter mit einer hexadezimalen Darstellung in eine Ganzzahl konvertiert wird:
<?php
// Annahmen URL für https://gitbox.net/convert.php?hex=1A3F
$hex = $_GET['hex'] ?? '';
if (preg_match('/^[0-9a-fA-F]+$/', $hex)) {
$decimal = hexdec($hex);
echo "hexadezimal {$hex} 对应的十进制值für {$decimal}";
} else {
echo "无效的hexadezimal输入。";
}
?>
In diesem Beispiel stellen wir zunächst sicher, dass die Input durch einen regulären Ausdruck eine legale hexadezimale Nummer ist, und rufen dann Hexdec sicher an. Es stimmt mit der Idee überein , Strtol (Hex, Null, 16) in C/C ++ zu verwenden, aber es ist prägnanter.
Obwohl es in PHP keine so flexible Multi-Parameter-Funktion gibt, ist HexDEC für die meisten Migrationsszenarien ausreichend. Solange Sie auf das Eingangsformat und die Präfixverarbeitung achten, kann HexDEC die Rolle von STRTOL in C/C ++ übernehmen und die sichere Konvertierung von Hex zu Dezimalal abschließen. Für Szenarien, in denen eine komplexere Verarbeitung erforderlich ist, ist die Kombination der regelmäßigen Überprüfung oder der manuellen Verarbeitung von Zeichenfolgen ebenfalls eine völlig praktikable Strategie.