Числовая строка (произвольный размер) → Несколько целых чисел

StackOverflow https://stackoverflow.com/questions/1576192

Вопрос

У меня возникла проблема, потому что моя база данных содержит данные 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 напрямую.

Здесь у вас есть несколько вариантов:

  1. Используйте либо БКМатематика или GMP если они включены в вашу установку PHP.Оба должны предоставлять целые числа произвольной длины.
  2. Попросите базу данных преобразовать целое число в длинную битовую строку длиной 64 символа.
  3. Напишите реализацию bignum самостоятельно (больше работы :-))
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top