6

这是瘦的(向下滚动以查看问题):我正在使用 Huffman 编码来压缩文件(用于项目)。我已经制作了地图,并将所有内容都变成了这样的字符串:

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 回答