J'ai un tableau d'octets que je voudrais mapper à leurs équivalents ASCII.
Comment puis-je faire ceci?
Si vous voulez dire par tableau d'octets:
$bytes = array(255, 0, 55, 42, 17, );
Alors c'est aussi simple que:
$string = implode(array_map("chr", $bytes));
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.
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).
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.
Encore une autre manière:
$str = vsprintf(str_repeat('%c', count($bytes)), $bytes);
Hourra!
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 .
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