PHP:バイナリ文字列への文字列として表されるビッグ整数ベース10

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

  •  27-12-2019
  •  | 
  •  

質問

文字列として表される実際の大きな整数をバイナリ文字列(AKA Normal Integerに変換する必要がありますが、通常は通常のPHP integerが保持できるほど大きい)をデータベースに保存し、ユニークなインデックスがあります。

番号はGMP(GMP_Strval())から来ており、長さが異なる場合があります。通常、約200~300文字がありますので、PHP整数にはありません。アイデアは、整数、種類の大きな整数を表すバイナリ文字列に変換することです。PHPでやりますか?

役に立ちましたか?

解決 2

Math_bigIntegerライブラリを見つけました。

$a = new Math_BigInteger($intString);
$base256IntString = $a->toBytes();
.

https://github.com/pear/math_biginteger

他のヒント

これを行うことができるようにしてください。 10進数を手作業でバイナリに変換する方法を忘れないでください。

  1. 最後の桁が偶数(0を与える)または奇数(A 1を与える)
  2. 1を取得した場合は1を減算します。
  3. 2で割ってください。これは、小学校のように桁で桁を桁数で行わなければなりません
  4. DecimalNumberがゼロになるまでこれを繰り返します。
  5. 私はこの

    の機能を書きました
    function strMod2(array $dec)
    {
        return ((int)end($dec)) % 2;
    }
    
    function strDivBy2(array $dec)
    {
        $res = [];
        $carry = 0;
    
        if($dec[0] == '0')
            array_shift($dec);
    
        $len = count($dec);
        for($i = 0; $i < $len; $i++)
        {
            $num = $carry*10 + ((int)$dec[$i]);
            $carry = $num % 2;
            $num -= $carry;
            $res[] = $num / 2;
        }
    
        return $res;
    }
    
    
    function dec2bin_str($dec)
    {
        $dec_arr = str_split($dec);
        $bin_arr = [];
        while(count($dec_arr) > 1 || $dec_arr[0] != 0)
        {
            array_unshift($bin_arr, strMod2($dec_arr));
            $dec_arr = strDivBy2($dec_arr);
        }
    
        return implode($bin_arr);
    }
    
    .

    として使用できます
    echo dec2bin_str('5');     // '101'
    echo dec2bin_str('146456131894613465451');        // '1111111000001111100101101000000000000010100001100010101100101101011'
    
    .

    大きな整数のライブラリを使用することで、これをより速く行うことができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top