Hexadecimal / Decimal

malicolm -  
 malicolm -
Bonjour,

je cherche à faire un petit script qui pemet de récupéré une valeur dans un fichier (binaire),
et de pouvoir la modifier en fonction d'une valeur saisie.

les valeurs dans le fichier son négative (par exemple, 100, la valeur, donne -101 normalement, soit FF F FF FF FF FF FF 9B en hexadecimal)

j'utilise hex2bin() pour avoir l'hexadecimal à des offsets précis (par exemple, ici, je récupère 9B FF F FF FF FF FF FF), après un petit traitement

mon problème est que je ne sais pas comment avoir ces informations correctement dans à l'aide des fonctions hexdec() et sa réciproque dechex().

par ailleur, je me pose la question de cette récupération d'information, car même à l'aide de la calculatrice windows (qui me sert de référence pour ma conversion Decimal / Hexadecimal), lorsque je tape -101 en mode Dec et que je passe en mode Hexa, j'ai bien FF F FF FF FF FF FF 9B, mais lorsque je repasse en mode Dec, j'obtiens 18446744073709551515.

quelqu'un aurait un complèment d'information sur ce qui m'arrive?
est ce que les valeurs décimal négative dans les fichiers binaire sont de type double?
les bits signés ou non on t'il une infulance sur le signe de la valeur extraite?
y'a t'il un moyen à l'aide des fonctions pack() et unpack() dans PHP de récupérer ces informations correctement?

j'ai regardé un peu partout, des informations sur l'hexadécimal, ça manque pas, mais je ne sais pas où chercher précisément.

tout aide serai la bienvenu

en vous remerciant d'avance

3 réponses

malicolm
 
merci bizu53,

ça résout presque mon problème.

je sais maintenant que mon problème vient bien des signés et non signés,
je ne savais pas qu'il été possible d'avoir des valeurs hexadécimal commençant par des +/-

malheureusement, en PHP, la fonction hexdec() ne la prend pas en compte.
0
Utilisateur anonyme
 
ce n'est pas vraiment ce que j'ai voulu dire. En fait en décimal on note le "-" devant pour les nombres négatifs, mais pas en hexa, ni binaire, ce n'est qu'une notation. (Tout dépend de si ton nombre représente un nombre positif ou négatif ;-))
-1
malicolm
 
je pense avoir compris,
par exemple la calculatrice windows utilise le signe négatif avec les hexadécimals pour savoir dans quel type d'usage elle ce trouve (signé ou non), c'est utilisé uniquement par le programme (qui traite d'une autre façon)

j'avais espéré que la fonction hexdec de PHP ai le même mode de fonctionnement, mais visiblement non, j'ai encore quelques teste à faire, mais ça ce présente plutôt mal, je ne sais pas comment je vais pouvoir arrivé à faire ce passage de mode de fonctionnement (si il existe) ou quel alternative il me reste pour arrivé à avoir les bonnes informations
0
Utilisateur anonyme
 
Pour tout ce que je ne réponds pas à tes problèmes je ne sais pas.
En revanche :

"lorsque je tape -101 en mode Dec et que je passe en mode Hexa, j'ai bien FF F FF FF FF FF FF 9B, mais lorsque je repasse en mode Dec, j'obtiens 18446744073709551515.

quelqu'un aurait un complèment d'information sur ce qui m'arrive?"


C'est parce que dans la calc de Windows tu ne peux pas définir si ton nombre est signé ou non, donc par défaut il le prends comme non signé. C'est pour ça que ça fait pareil avec l'octal et le binaire aussi.
Quand tu passes d'un nombre négatif en mode décimal, au mode hexa/octal/binaire, il t'affiche le bon résultat parce qu'il sait que ton nombre décimal est signé. Parcontre quand tu veux revenir, il ne sait pas que ton nombre hexa/octal ou binaire l'est, du coup il t'affiche son équivalent comme s'il s'agissait du nombre positif FFFFFFFFFFFFFF9B (pour le cas de l'hexa).

Si tu veux pouvoir faire tes changements de mode correctement :
Lorsque tu as FFFFFFFFFFFFFF9B en mode hexa, clique sur le bouton +/-, et ensuite passe dans un autre mode ;-)
-1