hexdec() 函数的作用是将十六进制字符串转换为十进制整数。其语法如下:
$decimal = hexdec("1A");
以上代码将字符串 "1A" 转换为十进制的 26。需要注意的是,hexdec() 不区分大小写,"1A" 和 "1a" 的结果是相同的。
sprintf() 用于将变量格式化为字符串。我们可以使用它将整数格式化为指定大小写的十六进制字符串:
$hexLower = sprintf("%x", 255); // 输出 "ff"
$hexUpper = sprintf("%X", 255); // 输出 "FF"
%x 表示小写的十六进制格式,%X 表示大写。
结合 hexdec() 与 sprintf(),我们可以实现任意十六进制字符串的大小写转换:
$originalHex = "a1b2c3";
$decimal = hexdec($originalHex); // 转为十进制
$upperHex = sprintf("%X", $decimal); // 转为大写十六进制
$lowerHex = sprintf("%x", $decimal); // 转为小写十六进制
运行以上代码后:
$upperHex 为 "A1B2C3"
$lowerHex 为 "a1b2c3"
这种方法尤其适用于统一输入格式或对接对大小写敏感的外部系统,比如某些需要大写十六进制字符串的 API 接口。
有时我们需要构造包含十六进制编码的 URL,而 URL 中的 %XX 编码可能需要统一大小写。例如:
$char = "#";
$encoded = strtoupper(bin2hex($char)); // 得到 "23"
$url = "https://gitbox.net/page.php?param=%" . $encoded;
输出的 URL 为:
https://gitbox.net/page.php?param=%23
如果你希望使用小写形式,只需将 strtoupper() 替换为 strtolower(),或者直接使用 sprintf('%x', ord($char))。
通过 hexdec() 将任意十六进制字符串解析为整数,再借助 sprintf() 可以轻松控制输出的十六进制格式是大写还是小写。这种方式不仅简洁,而且兼容性强,适合用于编码转换、数据格式化等多种场景。
掌握这两个函数的组合用法,可以让你在处理十六进制字符串时更加游刃有余。