web-dev-qa-db-fra.com

Comment convertir un tableau d'octets en chaîne en PHP?

J'ai un tableau d'octets que je voudrais mapper à leurs équivalents ASCII.

Comment puis-je faire ceci?

18
Damir

Si vous voulez dire par tableau d'octets:

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

array_map ()

Alors c'est aussi simple que:

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

pour chaque()

Quelle est la version compacte de:

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

pack()

Mais l'alternative la plus conseillée pourrait être d'utiliser pack("C*", [$array...]), même si cela nécessite une solution de contournement de tableau funky dans PHP pour transmettre la liste des entiers:

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

Cette construction est également plus utile si vous devez passer d'octets C * (pour ASCII chaînes) à des mots S * (pour UCS2) ou même pour avoir une liste de 32 bits. entiers L * (par exemple une chaîne Unicode UCS4).

68
mario

Modification de la réponse de Mario pour utiliser pack(): Depuis PHP 5.5, vous pouvez utiliser le décompactage des arguments via ...

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

Les autres fonctions sont faciles à utiliser, mais il est préférable d’avoir un code lisible.

2
Eaton Emmerich

Encore une autre manière:

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

Hourra!

2
Alix Axel

Mario a a déjà fourni le meilleur ajustement , mais voici un moyen plus exotique de le faire.

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

CodePad .

1
alex

Voici un exemple de conversion de Yodlee MFA ByteArray en image CAPTCHA. J'espère que ça aide quelqu'un ...

Vous devez simplement convertir le tableau d'octets en chaîne, puis encoder en base64.

Voici un exemple 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

0
Ofek Cohany