Как я могу преобразовать массив байтов в строку в PHP? - PullRequest
19 голосов
/ 29 марта 2011

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

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

Ответы [ 5 ]

73 голосов
/ 29 марта 2011

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

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

array_map ()

Тогда все просто:

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

foreach ()

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

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

pack ()

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

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

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

4 голосов
/ 15 ноября 2017

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

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

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

2 голосов
/ 17 мая 2011

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

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

Ура! * * 1004

1 голос
/ 17 мая 2011

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

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

CodePad .

0 голосов
/ 10 июля 2018

Ниже приведен пример преобразования Yodlee MFA ByteArray в изображение CAPTCHA. Надеюсь, это кому-нибудь поможет ...

Вам просто нужно преобразовать байтовый массив в строку, а затем кодировать в base64.

Вот пример PHP:

$byteArray = $obj_response->fieldInfo->image; //Here you get the image from the API getMFAResponse

$string = implode(array_map("chr", $byteArray)); //Convert it to string

$base64 = base64_encode($string); //Encode to base64

$img = "<img src= 'data:image/jpeg;base64, $base64' />"; //Create the image

print($img); //Display the image

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...