.
Ah ben il faut le tester alors !!!
Voilà ma solution. Le piège est que PHP fixe le type de la variable en fonction du format de la donnée qu'on lui fournit.
Ça doit faciliter la vie du codeur quand il se limite à utiliser les variables pour les tâches courantes, mais vachement déroutant si on veut la traiter un peu différemment, comme moi qui découvre ça.
Bien sûr, si j'avais eu un pote à coté de ma chaise qui me l'ait dit, j'aurais pas cherché tout seul dans mon coin. Fallait le savoir.
Pour moi qui reçoit une trame organisée en mots de 8 bits (une chaine d'unsigned char) le plus simple c'est la fonction unpack :
<?php
// les 3 valeurs suivantes sont identiques, mais pas leur formatage dans $buffer...
// intervertir les lignes pour tester !
$buffer = 1568010446; // notation décimale
$buffer = 0b01011101011101011111000011001110; // notation binaire >= PHP 5.4
$buffer = "\x5D\x75\xF0\xCE"; // notation hexadécimale (char 8 bits)
$array1 = unpack("C*", $buffer);
printf(' 0x%X 0x%X 0x%X 0x%X <br>', $array1[1], $array1[2], $array1[3], $array1[4]);
?>
Resultat : 0x5D 0x75 0xF0 0xCE se retrouvent là où y faut dans mes variables $array1[x]
On peut spécifier un formatage différent de $buffer, voir la commande "pack".
A noter qu'avec unpack, les index commencent à 1...
Et voilà.
.
Ah ben il faut le tester alors !!!
Voilà ma solution. Le piège est que PHP fixe le type de la variable en fonction du format de la donnée qu'on lui fournit.
Ça doit faciliter la vie du codeur quand il se limite à utiliser les variables pour les tâches courantes, mais vachement déroutant si on veut la traiter un peu différemment, comme moi qui découvre ça.
Bien sûr, si j'avais eu un pote à coté de ma chaise qui me l'ait dit, j'aurais pas cherché tout seul dans mon coin. Fallait le savoir.
Pour moi qui reçoit une trame organisée en mots de 8 bits (une chaine d'unsigned char) le plus simple c'est la fonction unpack :
[php]
<?php
// les 3 valeurs suivantes sont identiques, mais pas leur formatage dans $buffer...
// intervertir les lignes pour tester !
$buffer = 1568010446; // notation décimale
$buffer = 0b01011101011101011111000011001110; // notation binaire >= PHP 5.4
$buffer = "\x5D\x75\xF0\xCE"; // notation hexadécimale (char 8 bits)
$array1 = unpack("C*", $buffer);
printf(' 0x%X 0x%X 0x%X 0x%X <br>', $array1[1], $array1[2], $array1[3], $array1[4]);
?> [/php]
Resultat : 0x5D 0x75 0xF0 0xCE se retrouvent là où y faut dans mes variables $array1[x]
On peut spécifier un formatage différent de $buffer, voir la commande "pack".
A noter qu'avec unpack, les index commencent à 1...
Et voilà.