Domanda

Io corro in un problema perché la mia banca dati contiene dati BIGINT (interi a 64 bit), ma la versione di PHP sono in esecuzione è solo a 32 bit.

Così quando gli strappo valore da una tavola alla fine con una stringa numerica rappresenta un numero intero a 64 bit in base 10. Nei avrei idealmente come fare è utilizzare l'intero a 64 bit come una maschera di bit. Così ho bisogno di andare a entrambi i due interi a 32 bit (uno che rappresenta la parte superiore ed una parte inferiore) o una stringa numerica in base 2.

Il problema è che non posso moltiplico fuori perché il mio PHP è solo a 32 bit. Sono bloccato?

È stato utile?

Soluzione

È possibile utilizzare MySQL po operatori di spostamento dividere il numero intero a 64 bit in due interi a 32 bit. Quindi, è possibile selezionare:

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

Altri suggerimenti

Per gestire interi dimensione arbitraria, si hanno due opzioni in PHP: GMP e BC Math metodi.

I credere GMP è più efficiente, utilizzando alcune risorse personalizzate, mentre BC utilizza direttamente le stringhe.

Se non sarà procedante troppi (migliaia o più) di numeri alla volta, si può usare direttamente aC.

Hai alcune opzioni qui:

  1. BCMath o GMP se sono inclusi nella propria installazione di PHP. Entrambi dovrebbero fornire interi di lunghezza arbitraria.
  2. Fai il database per convertire il numero intero in una stringa lunga po 'di 64 caratteri al posto
  3. Scrivi un'implementazione bignum te stesso (più di lavoro: -))
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top