[RESOLU] Hexa => Binaire incomplet

Eléphanteau du PHP | 10 Messages

28 janv. 2019, 12:24

Bonjour,

Je dois décoder une trame hexa en la passant en binaire (j'utilise base_convert $hex,16,2)...

Quelques exemples (HEX / BIN avec base convert / Binaire à obtenir) :
01 / 1 / 10 00 00 00
02 / 10 / 01 00 00 00
07 / 11 1 / 11 10 00 00
0E / 11 10 / 01 11 00 00
08 / 10 00 / 00 01 00 00
13 / 10 02 1 / 11 00 10 00
9C / 10 01 11 00 => Ok

Le problème est que si le résultat binaire ne comporte pas 8 digits je dois le lire à l'envers et compléter par des zéros... mais si le résultat "est complet" il faut le lire dans l'ordre... c'est un peu casse-tête...

Est-ce qu'il existe une fonction php pour transformer un hexa en "binaire complet" ? J'ai fait pas mal de recherche, avant de lancer une usine à gaz, je me disais que peut-être quelques idées viendrait d'ici.

Excellente semaine à tous,

A. Lits

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

28 janv. 2019, 12:45

Regarde peut être ce commentaire de la doc :
http://php.net/manual/fr/function.base- ... .php#42002

Il ne fait pas la même conversion que toi mais il est tombé j'ai l'impression sur le même cas qu'il contourne notamment avec str_pad() pour compléter avec des zéros, peut être que tu peux t'inspirer de son code.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 10 Messages

28 janv. 2019, 15:00

Voilà la solution la moins pire ;-)
//Détails des contacts
$details = $data[20].$data[21];
$detailsbin = base_convert($details, 16, 2);

//Si moins de 8 digits, ajout de 0 et inversion
if (strlen($detailsbin) < 8) {
$binaire = sprintf("%08d", $detailsbin);
$detailsio = strrev ($binaire);
}
else {
$detailsio = $detailsbin;
}

Eléphant du PHP | 63 Messages

28 janv. 2019, 15:08

sprintf sait faire du binaire avec b
$hexa = '01';
echo sprintf('%08b', hexdec($hexa)); // 00000001