6

これがスキニーです(下にスクロールして問題を確認してください):ハフマンエンコーディングを行って、PHPを使用してファイルを圧縮しています(プロジェクト用)。マップを作成し、すべてを次のような文字列にしました。

00101010001100001110011101001101111011111011

次に、これを実際のバイナリ文字列に変換する必要があります。現在の状態では、1 と 0 の文字列のみです。

ここに問題があります:

1 と 0 の文字列の長さは 17,747,595 文字であり、約 550,000 で実際に遅くなります。

これは私が持っているコードです:

<?php

$i=0
$len = strlen($binaryString);

while ($i < $len){
    $section = substr($binaryString,$i,$i+8);
    $out .= chr(bindec($section));
    $i=$i+8;
}

?>

これを 1700 万文字の文字列を実行するのに十分効率的にするにはどうすればよいでしょうか?

ご支援いただきありがとうございます。

4

1 に答える 1

5

gmpで使用できるループは必要ありませんpack

$file = "binary.txt";
$string = file_get_contents($file);
$start = microtime(true);

// Convert the string
$string = simpleConvert($string);
//echo $string ;

var_dump(number_format(filesize($file),2),microtime(true)- $start);

function simpleConvert($string) {
    return pack('H*',gmp_strval(gmp_init($string, 2), 16));
}

出力

string '25,648,639.00' (length=13) <---- Length Grater than 17,747,595
float 1.0633520126343  <---------------- Total Conversion Time 

リンク

注ソリューションにはGMP関数が必要です

于 2012-11-06T20:27:21.920 に答える