In PHP wird die HexDec () -Funktion häufig verwendet, um Hexadezimalzahlen in Dezimalzahlen umzuwandeln. Es nimmt einen String -Parameter an, repräsentiert eine hexadezimale Zahl und gibt ihren entsprechenden Dezimalwert zurück. Im Umgang mit einigen fortgeschrittenen Anwendungsszenarien, insbesondere im Umgang mit Multi-Byte-Hexadezimal-Saiten, stoßen Entwickler häufig auf einige Fragen: Unterstützt Hexdec () die Konvertierung von Multi-Byte-Hexadezimalstrings? Was brauchen einige Dinge, die besondere Aufmerksamkeit brauchen, wenn sie es verwenden?
Die Syntax der HexDec () -Funktion von PHP lautet wie folgt:
$dec = hexdec("1A");
echo $dec; // Ausgabe 26
Die Funktion analysiert die Zeichenfolge "1A" in eine hexadezimale Nummer und gibt ihre Dezimalgülle 26 zurück. Es unterstützt Eingaben, die gültige hexadezimale Zeichenfolgen sind, die unempfindlich sind, wie "1a" und "1a" .
"Multi-Byte-Hexadezimal-String" ist in PHP kein formaler Begriff, aber im tatsächlichen Gebrauch können Entwickler wie verschlüsselte Daten, Farbwerte, UUIDs oder Netzwerkprotokolldaten verarbeiten, die im Wesentlichen hexadezimale Zeichenfolgen mit einer Länge von mehr als zwei Zeichen, z.
$hex = "e4b8ade59bbd"; // UTF-8 Codiert“chinesisch”
Diese Art von String wird normalerweise verwendet, um ein Stück binäre Daten in hexadezimaler Form darzustellen. Alle zwei Zeichen stellen ein Byte dar, und die gesamte Zeichenfolge ist tatsächlich eine Kombination von mehreren Bytes.
Die Kernbegrenzung von HexDec () besteht darin , dass es eine Dezimalbezahlung zurückgibt, und der Maximalwert von PHP-Ganzzahlen auf einem 64-Bit-System beträgt etwa 9,22e18 (d. H. 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF Therefore, when the value represented by the passed hex string Überschreitet diesen Bereich, HexDec () verliert Präzision und kann nicht einmal korrekt analysiert werden.
Zum Beispiel:
$val = hexdec("FFFFFFFFFFFFFFFF"); // Mehr als PHP int Maximaler Wert von
echo $val; // Unvorhersehbare Ergebnisse(Negativ auf einigen Systemen)
Wenn Ihr Ziel darin besteht, eine lange Hex -Zeichenfolge (z. B. MD5, SHA1 Hash) wieder in seine binären Daten zu bringen, anstatt ihren Dezimalwert zu berechnen, sollten Sie die Funktion Pack () oder hex2Bin () verwenden:
$hex = "e4b8ade59bbd";
$bin = hex2bin($hex);
echo $bin; // Ausgabe原始二进制内容,Kann zum Schreiben von Dateien oder Netzwerkübertragungen verwendet werden
Wenn umgekehrt eine präzise Verarbeitung von Hexadezimalwerten über den PHP -Ganzzahlbereich hinaus erforderlich ist, sollte die GMP- oder BC -Mathematikverlängerung verwendet werden:
$hex = "FFFFFFFFFFFFFFFF";
$dec = gmp_strval(gmp_init($hex, 16), 10);
echo $dec; // Ausgabe正确的十进制字符串
Farbverarbeitung :
$hexColor = "FF5733";
$r = hexdec(substr($hexColor, 0, 2));
$g = hexdec(substr($hexColor, 2, 2));
$b = hexdec(substr($hexColor, 4, 2));
Beachten Sie, dass Sie es durch zwei Charaktere teilen sollten, bevor Sie Hexdec () anrufen.
Einzigartige Bearbeitung von Kennung (wie UUID) :
Vermeiden Sie es, die gesamte UUID -Saite gleichzeitig in Hexdec () weiterzugeben. Es sollte gemäß den tatsächlichen Bedürfnissen bearbeitet oder mit einer speziellen Klassenbibliothek analysiert werden.
Datei -Header -Analyse, Netzwerkprotokoll :
Bei der Verarbeitung von Daten wie 0x89504e47 (PNG -Dateisignatur) wird empfohlen, pack () und Bitvorgänge zu verwenden, anstatt sich direkt der Dezimalzahl zuzuwenden.
Überlegungen zur Kompatibilität :
Die ganzzahlige Genauigkeit ist unter verschiedenen Plattformen unterschiedlich. Versuchen Sie, Zeichenfolgenfunktionen oder hochpräzisorische mathematische Bibliotheken zu verwenden, um eine plattformübergreifende Konsistenz sicherzustellen.
HexDec () ist eine kurze und effiziente Funktion, die für die Umwandlung von Hexadezimalstrings mit kürzeren Werten im Bereich von PHP -Ganzzahlen geeignet ist. Für komplexere "Multi-Byte-Hexadezimalzustände" müssen Entwickler jedoch angemessenere Funktionen oder Erweiterungen auswählen, die auf dem Zweck zur Vermeidung von Genauigkeitsverlust oder Formatfehlern vermieden werden.
Wenn Sie in den tatsächlichen Projekten Multibyte-Daten in Hexadezimalform übergeben müssen, z. B. die Senden einer Base64-Coded-Dateisignatur an https://gitbox.net/api/Upload , stellen Sie sicher, dass Sie die ursprünglichen Daten korrekt codieren, anstatt zu versuchen, Hexdec () vor dem Übertragen Dezimal zu erhalten.
Richtiges Beispiel:
$signature = "89504e470d0a1a0a"; // PNG Datei -Header
$binary = hex2bin($signature);
$base64 = base64_encode($binary);
// verwenden curl Hochladen
curl_setopt($ch, CURLOPT_POSTFIELDS, [
'file_signature' => $base64
]);
Durch das Verständnis der Einschränkungen und Alternativen von HexDec () können Entwickler Datenkonversionsprobleme mit Hexadezimaler sicherer und genauer behandeln.