Преобразование строки 1 и 0 в двоичное значение, а затем сжатие,PHP

У меня есть строка, например: "10001000101010001" в PHP Я сжимаю его с помощью gzcompress, но он сжимает эквивалент ASCII. Я хотел бы сжать строку, как если бы это были двоичные данные, а не двоичный эквивалент ASCII.

В основном у меня есть 2 проблемы:

  1. как преобразовать список из 1 и 0 в двоичный
  2. сжать полученный бинарный файл с помощью gzcompress

заранее спасибо.

1 ответ

Решение

Посмотрите на функцию bindec().

По сути, вы хотите что-то вроде (сухой код, пожалуйста, проверьте это сами, прежде чем слепо доверять этому)

function binaryStringToBytes($binaryString) {
    $output = '';
    for($i = 0; $i < strlen($binaryString); $i += 8) {
        $output .= chr(bindec(substr($binaryString, $i, 8)));
    }
    return $output;
}

превратить строку указанного вами формата в байтовую строку, после чего вы можете gzcompress() это по желанию.

Дополнительная функция что-то вроде

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;
}
Другие вопросы по тегам