Intereting Posts
Автоматическое создание настраиваемых значений полей в WordPress Как объединить два массива, взяв только значения из второго массива с теми же ключами, что и первый? Как выполнить цикл в наборе результатов mysql в режиме без жира? как сделать эхо-печать прямо сейчас на PHP? Вызов функции-члена bind_param () для объекта, не являющегося объектом Служебный файл, размещенный на другом сервере, для загрузки Как загрузить параметры конфигурации Symfony из базы данных (Doctrine) проблема с jquery uploadify и codeigniter session id Исправить PHP-метод для хранения специальных символов в MySQL DB несколько строк в форме для одного и того же объекта в symfony2 Как отобразить выбранные значения в раскрывающемся списке нескольких вариантов в приложении Yii2? utf8 как обычный текст php preg_split не распознает пробелы json_encode / json_decode – возвращает stdClass вместо Array в PHP Slim 3 получает текущий маршрут в промежуточном программном обеспечении

Как преобразовать массив байтов в строку в PHP?

У меня есть массив байтов, который я хотел бы сопоставить с их эквивалентами ASCII.

Как я могу это сделать?

Если по массиву байтов вы имеете в виду:

$bytes = array(255, 0, 55, 42, 17, ); 

array_map ()

Тогда это так просто:

 $string = implode(array_map("chr", $bytes)); 

для каждого()

Какая компактная версия:

 $string = ""; foreach ($bytes as $chr) { $string .= chr($chr); } // Might be a bit speedier due to not constructing a temporary array. 

упаковка ()

Но наиболее целесообразной альтернативой может быть использование pack("C*", [$array...]) , хотя для передачи целочисленного списка требуется PHP-метод обхода в PHP:

 $str = call_user_func_array("pack", array_merge(array("C*"), $bytes))); 

Эта конструкция также более полезна, если вам может потребоваться переключиться с байтов C * (для строк ASCII) на слова S * (для UCS2) или даже иметь список из 32-битных целых чисел L * (например, строку Unicode UCS4).

Еще один способ:

 $str = vsprintf(str_repeat('%c', count($bytes)), $bytes); 

Ура!

Марио уже наилучшим образом подойдет , но вот более экзотический способ добиться этого.

 $str = call_user_func_array( 'sprintf', array_merge((array) str_repeat('%c', count($bytes)), $bytes) ); 

CodePad .

Поправляя ответ марио для использования pack() : Начиная с PHP 5.5, вы можете использовать распаковку Argument через ...

 $str = pack('C*', ...$bytes); 

Другие функции удобны для использования, но предпочтительно иметь читаемый код.