这是一种通用解决方案的一种方法,能够处理任何长度的十六进制字符串:
<?php
function doNext($s, $slen) {
// String is even length here, exit if
// no sections left.
if ($slen == 0) {
return;
}
// This is a section other than the first,
// so prefix it with "." and output decimal.
echo ".";
echo hexdec(substr($s, 0, 2));
// Do remainder of string.
doNext(substr($s, 2), $slen - 2);
}
function doIt($s) {
// Get length, exit if zero.
$slen = strlen($s);
if ($slen == 0) {
return;
}
// Process forst section, one or two
// characters depending on length.
if (($slen % 2) != 0) {
echo hexdec(substr($s, 0, 1));
doNext(substr($s, 1), $slen - 1);
} else {
echo hexdec(substr($s, 0, 2));
doNext(substr($s, 2), $slen - 2);
}
}
// Here's the test case, feel free to expand.
doIt("0013D5011F46");
?>
它基本上将字符串视为一组两位十六进制数字部分,处理前面的部分(如果字符串长度为奇数,则可能只有一个字符长),然后将其剥离并递归处理字符串的其余部分.
对于除第一个部分之外的每个部分,它输出. 后跟十进制值。