Pergunta

Estou enfrentando um problema porque meu banco de dados tem dados BIGINT (números inteiros de 64 bits), mas a versão do PHP que estou executando é de apenas 32 bits.

Então, quando retiro o valor de uma tabela, acabo com uma sequência numérica representando um número inteiro de 64 bits na base 10. O que eu gostaria de fazer é usar o número inteiro de 64 bits como uma máscara de bits. Então, eu preciso ir para dois números inteiros de 32 bits (um representando a parte superior e outro na parte inferior) ou uma corda numérica na base 2.

O problema é que não posso simplesmente multipli-lo porque meu PHP é de apenas 32 bits. Estou preso?

Foi útil?

Solução

Você pode usar o mysql operadores de mudança de bits dividir o número inteiro de 64 bits em dois números inteiros de 32 bits. Então, você pode selecionar:

select (myBigIntField & 0xffffffff) as lowerHalf,
       (myBigIntField >> 32) as upperHalf

Outras dicas

Para lidar com números inteiros de tamanho arbitrário, você tem duas opções no PHP: GMP e BC Math métodos.

EU acreditam O GMP é mais eficiente usando alguns recursos personalizados, enquanto o BC usa strings diretamente.

Se você não estiver processando muitos (milhares ou mais) de números por vez, poderá usar o BC diretamente.

Você tem algumas opções aqui:

  1. Use qualquer um Bcmath ou GMP Se eles estiverem incluídos na sua instalação PHP. Ambos devem fornecer números inteiros de comprimento arbitrário.
  2. Peça ao banco de dados para converter o número inteiro em uma string de bit de longa duração de 64 caracteres
  3. Escreva uma implementação de Bignum (mais trabalho :-))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top