2012-05-09 7 views
1

Twitter APIで遊んでいます。PHP - 文字列を64ビットに変換

私はこの数字を文字列形式にしていますが、これを1000xE09のように普通の読み取り可能な数値に変更する必要があります。なぜなら、私は減算する必要があるからです(これはTwitter IDのようなものです)。 -1を返します。次に、数字を文字列として送信する必要があります。

PHPでは、文字列「199693823725682700」を別の文字列「199693823725682699」(元の番号-1)に変更するにはどうすればよいですか?

ありがとうございます!

答えて

4

BCMathが使用できない場合、この関数は、文字列として格納され、任意のサイズの整数をデクリメントします(それが利用可能な場合、それが好ましいオプションであろう)。浮動小数点数や科学記法の補間の処理はありません。オプションの符号付き10進数の文字列でのみ機能します。

function decrement_string ($str) { 

    // 1 and 0 are special cases with this method 
    if ($str == 1 || $str == 0) return (string) ($str - 1); 

    // Determine if number is negative 
    $negative = $str[0] == '-'; 

    // Strip sign and leading zeros 
    $str = ltrim($str, '0-+'); 

    // Loop characters backwards 
    for ($i = strlen($str) - 1; $i >= 0; $i--) { 

    if ($negative) { // Handle negative numbers 

     if ($str[$i] < 9) { 
     $str[$i] = $str[$i] + 1; 
     break; 
     } else { 
     $str[$i] = 0; 
     } 

    } else { // Handle positive numbers 

     if ($str[$i]) { 
     $str[$i] = $str[$i] - 1; 
     break; 
     } else { 
     $str[$i] = 9; 
     } 

    } 

    } 

    return ($negative ? '-' : '').ltrim($str, '0'); 

} 

See it working

+0

これは私の作品です。 bssubなどは私の場合はうまくいきませんでした。そのような巧妙なコードをありがとう。 – clerksx

0

あなたはここに

manualで、PHPでGMPを試してみてください。

1

明らかに今のところPHPの大きな整数を処理する唯一の方法は、bcmath拡張子を使用することです。 64ビット整数はPHP6で計画されています。

+0

何PHP6はありません。 5.4リリースノートを参照してください。 – DmitryR

+0

@DmitryR:リンクはありますか? [5.4.0リリースアナウンス](http://php.net/releases/5_4_0.php)に記載されている唯一のことは、「PHP 5.4はWindows XPとWindows 2003をサポートする最後のシリーズになります。 PHP 5.4以降のWindows版のバイナリパッケージです。 – Travesty3

関連する問題