Oracle11g преобразования большого целого числа в шестнадцатеричные строки в php - PullRequest
1 голос
/ 10 февраля 2011

У меня есть столбец в таблице, объявленный как macaddr NUMBER(15) (диапазон представления целых чисел macaddress - до 15 цифр)

PHP извлекает эти значения в виде строк, очевидно, что в 32-битной системе dechex не будетобрабатывать эти большие целые числа.

Как я могу легко преобразовать эти строки в представление шестнадцатеричного macaddr (человека с возможностью редактирования)?И тот же вопрос в противоположном направлении?

Ответы [ 2 ]

1 голос
/ 11 февраля 2011

Вам действительно нужно хранить эту информацию в числовой форме? Современные компьютеры имеют много свободного места.

В любом случае вы можете использовать PHP для преобразования чисел большего размера.
Мое скромное решение - не полагаться на типы, предоставляемые PHP, и использовать BCMath Arbitrary Precision Matmatics .
В соответствии с руководством библиотека поставляется в комплекте с PHP начиная с версии 4.0.4. Если вы запускаете PHP в Windows, это работает прямо. В противном случае вам необходимо настроить - 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');


    ?>
0 голосов
/ 10 февраля 2011

Вы могли бы найти полезным тип float , предоставляемый PHP, который достаточно велик для хранения ваших значений. Сначала преобразуйте в число с плавающей точкой, а затем вставьте или обновите в поле вашей базы данных. Основная проблема здесь - преобразовать числа с плавающей точкой в ​​шестнадцатеричные числа.

После некоторых собственных попыток написать функцию hex2dec я нашел ресурс : руководство по PHP.

Посмотрите на первый комментарий Nstiac . Он пишет пару функций для преобразования шестнадцатеричных строк в числа с плавающей точкой

РЕДАКТИРОВАТЬ: предоставленные функции как-то сломались (см. Комментарии ниже)! Используйте на свой страх и риск!

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

...