Rechercher : dans
Par :

[PHP] transformation hexadecimal en octet

Dernière réponse le 11 mar 2009 à 21:44:33 chalex, le 16 jan 2009 à 00:25:22 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Firefox 1.5 <- non c'est faut ccm c'est la version 3 !

Meilleures réponses pour « [PHP] transformation hexadecimal en octet » dans :
[PHP] Transformer une URL en lien hypertexte cliquable Voir Grâce aux expressions régulières, il est possible de transformer en lien hypertexte toute URL de la forme http://URL (ou ftp://URL) ou bien commençant par www. :
PHP - Nettoyer une chaîne de caractères VoirVoici une fonction en PHP qui peut être assez pratique, surtout quand on fait de l'URL Rewriting. Cette fonction permet de transformer les caractères de n'importe quelle chaîne de caractères en chaîne non accentuée, en enlevant les caractères...
Transformer un fichier Word (.doc) en PDF VoirTransformer en fichier PDF un fichier Microsoft Word (.doc) Rien de plus simple ! Ouvrez votre fichier *.doc avec OpenOffice.org Réglez éventuellement la mise en page par le menu Format / Page... Dès lors, 2 solutions pour transformer...
[PHP] Upload de fichiers VoirLe langage PHP permet de gérer des fichiers envoyés (uploadés) grâce à un formulaire HTML. Formulaire d'envoi de fichiers Configuration de PHP pour permettre l'upload Récupération du fichier avec PHP Formulaire d'envoi de fichiers La...
Télécharger PHP Edit VoirPHPEdit est un environnement de développement intégré (IDE) sous Windows pour le langage PHP. Il offre un grand nombre de fonctionnalités permettant de développer plus efficacement : Coloration syntaxique Auto-complétion des fonctions Débuggeur...
Télécharger Transform XP to Vista VoirSi vous cherchez quelque chose de nouveau pour personnaliser l'interface de votre Windows XP, mais que vous n'avez pas le temps pour des tests. Ce thème est fait pour vous. Transform Xp to Vista est un pack complet pour la personnalisation de votre...
Système hexadécimal VoirSystème hexadécimal Les nombres binaires étant de plus en plus longs, il a fallu introduire une nouvelle base : la base hexadécimale. La base hexadécimale consiste à compter sur une base 16, c'est pourquoi au-delà des 10 premiers chiffres on a...
Le codage binaire VoirPrésentation du binaire Bit Poids des bits Conversions Octet KiloOctets, MégaOctets Opérations en binaire Addition binaire Multiplication binaire Présentation du binaire Vers la fin des années 30, Claude Shannon démontra qu'à l'aide...
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...

1

HostOfSeraphim, le 16 jan 2009 à 00:26:49

En même temps, 2 en binaire c'est 10, pas 0010.

Tu veux obligatoirement deux zéros devant ?

Configuration : Linux Debian Lenny / Noyau 2.6.26 / Gnome / Iceweasel 3
Connexion Internet : ADSL Orange 8M (Livebox)

Répondre à HostOfSeraphim

2

chalex, le 16 jan 2009 à 00:39:36

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 :)

Répondre à chalex

3

blaster, le 16 jan 2009 à 13:01:28

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

Répondre à blaster

4

chalex, le 16 jan 2009 à 15:21:48

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 ?)

Répondre à chalex

5

radinor, le 11 mar 2009 à 18:54:49

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 ...

Répondre à radinor

6

 chalex, le 11 mar 2009 à 21:44:33
  • +1

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...

Répondre à chalex