[PHP] transformation hexadecimal en octet

Fermé
chalex - 16 janv. 2009 à 00:25
 chalex - 11 mars 2009 à 21:44
Bonjour,

je voudrais savoir si quelqu'un sait comment passer une valeur décimale en octet (avec les 0 zéros qui vont bien)

je m'explique :
je jeux convertir en php le chiffre 2 (exemple simple) qui est en hexadecimal en binaire
php me donne : 10
moi je veux 0010

est ce que quelqu'un connait une fonction du style hex2oct ou quelque chose comme ça

merci bien car ça me saoule cette histoire de 0

cordialement
A voir également:

2 réponses

HostOfSeraphim Messages postés 6750 Date d'inscription jeudi 2 février 2006 Statut Contributeur Dernière intervention 31 juillet 2016 1 608
16 janv. 2009 à 00:26
En même temps, 2 en binaire c'est 10, pas 0010.

Tu veux obligatoirement deux zéros devant ?

0
oui, il me le faut en octet en fait, j'avais oublié de préciser, pour garder une structure correcte

merci de ta réponse rapide :)
0
C'est de la triche mais cela peut peut être t'aider

if($hex < 100){
if($hex < 10){
$hex = "0".$hex;
}
$hex = "0".$hex;
}

J'ai utilisé cette astuce sur un petit soft mais je n'ai pas vraiment chercher plus loin car cela fonctionne
voilà bon courage
0
chalex > blaster
16 janv. 2009 à 15:21
Merci blaster c'est une solution qui fonctionne parfaitement pour mon exemple.

Par contre, mon vrai script comporte 8000 bits
Je le transforme en hexa, et j'envoie le résultat à une autre page
Cette autre page prend l'hexa et le recode en bit et c'est à ce moment la que je perds mes zéro, voici un test sur mon code (j'ai pas mis les 8000 caractères et vous comprendrez bien pourquoi)
<?php
$binaire = "01000000000000000000000011100000110"; // par exemple (j'ai pas mis les 8000 caractères)
$hexadecimal = base_convert($binaire, 2, 16);
echo "<br> binaire : $binaire <br> hexa : $hexadecimal";
$binaire = base_convert($hexadecimal, 16, 2);
echo "<br> binaire : $binaire ";
?>

voila ce qui est affiché :
binaire : 01000000000000000000000011100000110
hexa : 200000706
binaire : 1000000000000000000000011100000110

je perd donc le premier 0 et ça m'embete grave

Vous voyez ce que je veux dire ? (You know what I mean ?)
0
radinor > chalex
11 mars 2009 à 18:54
Quand tu sauras ce que tu veux faire je pense que tu auras bien progressé !
j'ai envie de te dire pourquoi ne reste tu pas en binaire ? si c'est pour gagner des "octets" c'est un débat dépassé et il faut rester en binaire, car les conversions binaire => hexa => binaire sont très pénalisantes en temps CPU
Remarque que ton binaire n'a que le nom de la variable $bin comme AOC ! si je mets $dec à la place ce sera du décimal ! on est bien d'accord. PHP manque de discernement dans les types de variable et ça ne simplifie pas la tâche.
Ceci étant dit :
nous appellerons OCTET une zone mémoire de 8 bits consécutifs,chaque bit valant 0 ou 1 (base binaire ou 2)
cet octet peut se représenter en 2 groupes de 4 bits consécutifs, chaque groupe ayant donc 16 symboles possibles d'où appellation hexadécimale (base 16) symboles 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
exemple 00000001 <=> 01, 00010001 <=> 11, 00110012=AB, jusqu'au maximum 11111111<=>FF

Donc si tu veux "passer" des "octets" il faut que strlen($bin)=q*8 et ta chaine sera du genre $hex = bin2hex(chr(00000010)).bin2hex(chr(00000000)).bin2hex(chr(00000000)).bin2hex(chr(00000111)).bin2hex(chr(00000110)) après avoir ajouté le nombre adéquat de 0 en début.
Remarquer que le contenu de $hex=0800004948 n'est pas la conversion de $bin mais la traduction hexa de chaque octet l'un après l'autre.
Noter aussi que je doute que l'instruction convert, que tu utilises, n'explose pas appliquée à 8500 bits, ou rende une bonne valeur, après décodage par le module récepteur !
J'ai l'intention de fouiller un peu plus le sujet ...
0
chalex > radinor
11 mars 2009 à 21:44
Ben en fait je voulais passer en hexadécimal car j'envoyais 8000 bits dans l'url et ça passait pas (au dessus de 2000 bits mon url était tronquée) donc voilà l'intéret de ma question.

J'avais trouvé une réponse en ajoutant à l'url une variable pour connaitre le nombre de caractère de ma variable $binaire de départ, et je la compare à celle d'arrivée et j'ajoute le nombre de 0 de différence.

" Remarque que ton binaire n'a que le nom de la variable $bin comme AOC ! si je mets $dec à la place ce sera du décimal ! on est bien d'accord."

Dans la programmation oui, mais tu comprend bien que c'est un nombre binaire...
0