PHP中的Oracle11g大整数到十六进制字符串转换

时间:2011-02-10 11:09:13

标签: php macos oracle11g biginteger

我在表中有一列声明为macaddr NUMBER(15)(宏地址整数表示范围 - 最多15位)

PHP将此值作为字符串获取,显然在32位系统上,dechex将无法处理大的整数。

如何轻松地将该字符串转换为十六进制macaddr表示(人类可更改)?反方向的问题相同?

2 个答案:

答案 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字符串转换为浮点数

编辑:提供的功能显示有所破坏(见下面的评论)!使用风险!

http://www.php.net/manual/en/language.types.float.php