我在表中有一列声明为macaddr NUMBER(15)
(宏地址整数表示范围 - 最多15位)
PHP将此值作为字符串获取,显然在32位系统上,dechex
将无法处理大的整数。
如何轻松地将该字符串转换为十六进制macaddr表示(人类可更改)?反方向的问题相同?
答案 0 :(得分:1)
您真的需要以数字形式存储这些信息吗?现代计算机有足够的空间。
无论如何,您可以使用PHP来转换大于该数字的数字 我谦虚的解决方案是避免依赖PHP提供的类型并使用 BCMath任意精度数学。 根据手册,自4.0.4版以来,该库与PHP捆绑在一起。如果你在Windows中运行PHP,它会直接运行。否则,您必须使用 - enable-bcmath 进行配置 感谢PHP.net网站上的用户贡献说明,我发现了这两个方便的功能:
<?php
/* hexadecimal to/from decimal functions from user contributed notes at http://it.php.net/manual/en/ref.bc.php */
function bchexdec($hex) {
if(strlen($hex) == 1) {
return hexdec($hex);
} else {
$remain = substr($hex, 0, -1);
$last = substr($hex, -1);
return bcadd(bcmul(16, bchexdec($remain)), hexdec($last));
}
}
function bcdechex($dec) {
$last = bcmod($dec, 16);
$remain = bcdiv(bcsub($dec, $last), 16);
if($remain == 0) {
return dechex($last);
} else {
return bcdechex($remain).dechex($last);
}
}
echo bcdechex (130646634308);
echo '<br />';
echo bchexdec ('001e6b256f44');
?>
答案 1 :(得分:0)
您可以找到有用的PHP提供的 float 类型,它足以保存您的值。首先转换为float,然后插入或更新到数据库字段中。这里的主要问题是将浮点数转换为十六进制数。
在我自己尝试编写hex2dec函数的一些工作之后,我提出了 资源:PHP手册。
通过 Nstiac 查看第一条评论。他编写了几个函数来将Hex字符串转换为浮点数
编辑:提供的功能显示有所破坏(见下面的评论)!使用风险!