十六进制数字的字符串如:0X1.05P + 10
此十六进制数的实际值为:1044.0
我可以使用方法strtod使用C语言转换它。 但我找不到用PHP转换它的方法。有人可以告诉我该怎么做吗?
值字符串列表:
1. "0X1.FAP+9"
2. "0X1.C4P+9"
3. "0X1.F3P+9"
4. "0X1.05P+10"
答案 0 :(得分:0)
hexdec(0X1.05P+10)
好的,这对我来说看起来不对,因为它看起来不像正确的十六进制数,但它在php http://php.net/manual/en/function.hexdec.php中需要的hexdec()函数
echo hexdec("0X1FAP")+9
echo hexdec("0X1C4P")+9
echo hexdec("0X1F3P")+9
echo hexdec("0X105P")+10
decimal = hex (1044.0) 10 =(414) 16
答案 1 :(得分:0)
我认为你必须为此制作一个自定义功能。所以,因为今天我感觉很好,所以我为你定制了一个:
function strtod($hex) {
preg_match('#([\da-f]+)\.?([\da-f]*)p#i', $hex, $parts);
$i = 0;
$fractional_part = array_reduce(str_split($parts[2]), function($sum, $part) use (&$i) {
$sum += hexdec($part) * pow(16, --$i);
return $sum;
});
$decimal = (hexdec($parts[1]) + $fractional_part) * pow(2, array_pop(explode('+', $hex)));
return $decimal;
}
foreach(array('0X1.FAP+9', '0X1.C4P+9', '0X1.F3P+9', '0X1.05P+10', '0X1P+0') as $hex) {
var_dump(strtod($hex));
};
对于PHP 5.3以下的版本:
function strtod($hex) {
preg_match('#([\da-f]+)\.?([\da-f]*)p#i', $hex, $parts);
$fractional_part = 0;
foreach(str_split($parts[2]) as $index => $part) {
$fractional_part += hexdec($part) * pow(16, ($index + 1) * -1);
}
$decimal = (hexdec($parts[1]) + $fractional_part) * pow(2, array_pop(explode('+', $hex)));
return $decimal;
}
foreach(array('0X1.FAP+9', '0X1.C4P+9', '0X1.F3P+9', '0X1.05P+10', '0X1P+0') as $hex) {
var_dump(strtod($hex));
};