C/C ++プログラムをPHPに移植する場合、データ形式の変換問題が発生することがよくあります。特に、六角弦が整数に変換される場合、 StRTOLはこれをC/C ++で使用することに使用されますが、PHPでは、 HexDec関数を使用して同様の効果を達成することをお勧めします。
この記事では、2つの違いと使用法を紹介し、 StrtolをHexDecに置き換える方法の例で実証します。
C/C ++では、 Strtolは整数関数に強力な文字列です。そのプロトタイプは次のとおりです。
long int strtol(const char *nptr, char **endptr, int base);
NPTR :変換する文字列を指します。
EndPTR :変換を停止する文字列の部分を指します(nullにすることができます)。
ベース:バイナリ(通常は10または16)を変換します。
例えば:
char *hex = "0x1A3F";
long result = strtol(hex, NULL, 16);
// result = 6719
PHPは、ヘックス弦を小数点以下の整数に変換するための組み込み関数HexDecを提供します。構文は非常にシンプルです:
int hexdec(string $hex_string);
使用例:
$hex = "1A3F";
$result = hexdec($hex);
// $result = 6719
ここに$ hexに0xプレフィックスを含めるべきではありません。そうしないと、ヘックスデックが正しく解析されない場合があります。
C/C ++のSTRTOLをPHPのHexDecに置き換える場合、次のポイントに注意する必要があります。
プレフィックスを削除します:PHPのHexDecは0xまたは0xプレフィックスを受け入れず、削除する必要があります。
入力検証:CのSTRTOLは、文字列のエラー部分を識別できますが、 HexDecには停止変換位置に戻るための同様のパラメーターがなく、文字列の合法性を手動で検証する必要があります。
ケースの互換性:PHPのHexDecは、コンバージョンなしで大文字と小文字A – Fを自動的にサポートします。
以下は、16進表現を含むURLパラメーターを整数に変換する方法を示す簡単な例です。
<?php
// 仮定 URL のために https://gitbox.net/convert.php?hex=1A3F
$hex = $_GET['hex'] ?? '';
if (preg_match('/^[0-9a-fA-F]+$/', $hex)) {
$decimal = hexdec($hex);
echo "16進 {$hex} 对应的十进制值のために {$decimal}";
} else {
echo "无效的16進输入。";
}
?>
この例では、最初に、入力が正規表現を通じて法的六足数であることを確認し、次にHexDecを安全に呼び出します。 C/C ++でStrtol(Hex、Null、16)を使用するという考えと一致していますが、より簡潔です。
PHPのSTRTOLのように柔軟性のあるマルチパラメーター機能はありませんが、 HEXDECではほとんどの移行シナリオで十分です。入力形式とプレフィックス処理に注意を払う限り、 HexDecはC/C ++におけるStRTOLの役割を想定し、HEXから小数点までの安全な変換を完了することができます。より複雑な処理が必要なシナリオの場合、文字列の定期的な検証または手動処理を組み合わせることも完全に実行可能な戦略です。