Числовая строка (произвольный размер) → Несколько целых чисел
Вопрос
У меня возникла проблема, потому что моя база данных содержит данные BIGINT (64-битные целые числа), но версия PHP, которую я использую, только 32-битная.
Поэтому, когда я извлекаю значение из таблицы, я получаю числовую строку, представляющую 64-битное целое число по основанию 10.В идеале мне хотелось бы использовать 64-битное целое число в качестве битовой маски.Поэтому мне нужно перейти либо к двум 32-битным целым числам (одно представляет верхнюю часть, а другое — нижнюю часть), либо к числовой строке с основанием 2.
Проблема в том, что я не могу просто умножить это число, потому что мой PHP только 32-битный.Я застрял?
Решение
Вы можете использовать MySQL операторы битового сдвига чтобы разделить 64-битное целое число на два 32-битных целых числа.Итак, вы можете выбрать:
select (myBigIntField & 0xffffffff) as lowerHalf,
(myBigIntField >> 32) as upperHalf
Другие советы
Для обработки целых чисел произвольного размера в PHP есть два варианта: GMP и до н. э. Математика методы.
я полагать GMP более эффективен за счет использования некоторых пользовательских ресурсов, тогда как BC использует строки напрямую.
Если вы не будете обрабатывать слишком много (тысячи и более) чисел одновременно, вы можете использовать BC напрямую.
Здесь у вас есть несколько вариантов:
- Используйте либо БКМатематика или GMP если они включены в вашу установку PHP.Оба должны предоставлять целые числа произвольной длины.
- Попросите базу данных преобразовать целое число в длинную битовую строку длиной 64 символа.
- Напишите реализацию bignum самостоятельно (больше работы :-))