问题
I have a string for example: "10001000101010001" in PHP I am compressing it with gzcompress, but it compresses ASCII equivalent. I would like to compress the string as if it were binary data not it ASCII binary equivalent.
Bascially I have 2 problems:
- how to convert a list of 1s and 0s into binary
- compress the resulting binary with gzcompress
thanks in advance.
回答1:
Take a look at the bindec() function.
Basically you'll want something like (dry-coded, please test it yourself before blindly trusting it)
function binaryStringToBytes($binaryString) {
$output = '';
for($i = 0; $i < strlen($binaryString); $i += 8) {
$output .= chr(bindec(substr($binaryString, $i, 8)));
}
return $output;
}
to turn a string of the format you specified into a byte string, after which you can gzcompress()
it at will.
The complementary function is something like
function bytesToBinaryString($byteString) {
$out = '';
for($i = 0; $i < strlen($byteString); $i++) {
$out .= str_pad(decbin(ord($byteString[$i])), 8, '0', STR_PAD_LEFT);
}
return $out;
}
来源:https://stackoverflow.com/questions/6641807/converting-string-of-1s-and-0s-into-binary-value-then-compress-afterwards-php