Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Binaire vers nombre long [ Algorithme / Compression & Cryptage ] (cybercool33)

vendredi 24 novembre 2006 à 15:28:11 | Binaire vers nombre long

cybercool33

Bonjour,

Je suis en train de décrypter un fichier binaire. J'essai de recupérer un nombre codé sur 10 octets.
Je pense que le stockage de ce nombre est réalisé avec une mantisse de 64 bits, mais j'en suis pas sur.

Voilà trois valeurs stockés en hexa:
4005 F6E9 78D4 FDF3 C000=123.456
4005 F6E9 FBE7 6C8B 5000=123.457
4005 F6EA 7EF9 DB22 E000=123.458

Quelqu'un aurait un algorithme me permettant de décrypter ces nombres svp?

Merci
Cybercool

vendredi 24 novembre 2006 à 15:43:35 | Re : Binaire vers nombre long
vendredi 24 novembre 2006 à 16:27:06 | Re : Binaire vers nombre long

cybercool33

Non je ne trouve pas mon bonheur dans ces sources.

Ces sources donnent le moyen de transcrire de l'hexa vers de l'entier.
J'ai besoin de transcrire de l'hexa en nombres flottant (a virgule^^) stockées sur 10 octets .

Cybercool33

vendredi 24 novembre 2006 à 16:32:58 | Re : Binaire vers nombre long

casy

Membre Club
Es-tu certain que tes nombres sont codés sur 10 octets?

Normalement un nombre à virgule flotante c'est 32bits pour le single et 64bits pour le double soit respectivement 4 et 8 octets.
 Regarde du coté de la norme IEEE754



---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #

vendredi 24 novembre 2006 à 16:33:41 | Re : Binaire vers nombre long

TMONOD

Bonjour,

Sur Codeproject, un article récent sur la manipulation des trés grands nombres, en anglais (malheuresement) si tu n'y est pas trop allergique :
[ Lien ]

Jcbé[^]

vendredi 24 novembre 2006 à 16:50:11 | Re : Binaire vers nombre long

casy

Membre Club
Il existe bien des nombres à virgule flottantes de 80bits --> [ Lien ]


J'aurais appris quelque chose aujourd'hui.



---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #

vendredi 24 novembre 2006 à 17:05:40 | Re : Binaire vers nombre long

cybercool33

Oui Casy mes nombres sont stockées sur 10 Octets.

Jcbé, Le site parle des problèmes de calcul sur des grands nombres. Moi je veux juste décoder les nombres binaires qui sont stockées dans un fichier.

Casy, ton dernier lien est vraiment interessant cependant avec la formule :
Grande précision80 bits1 bit15 bits64 bits(-1)^S \times (1,M) \times 2^{(E-16383)}
Je n'arrive pas a retrouver ma valeur.
Exemple:
4005 F6E9 78D4 FDF3 C000=123.456
Comment connaitre la valeur de mon signe, ma mantisse et mon exposant?

Merci
Cybercool






vendredi 24 novembre 2006 à 17:49:22 | Re : Binaire vers nombre long

BruNews

Administrateur CodeS-SourceS

Ce genre de conversion me semble totalement hors de portée de tout langage interprété.

A simple fin didactique (sait-on jamais), je viens de te l'écrire.
Tu pourras passer les 2 fonctions dans une DLL qui exportera un appel HexaTenToDbl().

#include <windows.h>
#include <stdio.h>

__declspec(naked) DWORD __fastcall HexaToByte(char *pszhexa)
{
  __asm {
    or      eax, -1   ;// PRESUME ERREUR
    mov     dl, byte ptr[ecx]
    mov     cl, byte ptr[ecx+1]
    cmp     dl, 48
    jb      short btEXIT
    cmp     cl, 48
    jb      short btEXIT
    cmp     dl, 70
    ja      short btEXIT
    cmp     cl, 70
    ja      short btEXIT
    cmp     dl, 65
    jae     short hiAF
    cmp     dl, 57
    ja      short btEXIT
    sub     dl, 48
    jmp     short hiOK
hiAF:
    sub     dl, 55
hiOK:
    cmp     cl, 65
    jae     short loAF
    cmp     cl, 57
    ja      short btEXIT
    sub     cl, 48
    jmp     short loOK
loAF:
    sub     cl, 55
loOK:
    mov     al, dl
    shl     al, 4
    add     al, cl
    and     eax, 0FFh
btEXIT:
    ret     0
  }
}

// FONCTION RETOURNE 0.0 SI CHAINE NON HEXA (0-9, A-F sur 20 caractères)
// PAS EU LE TEMPS DE PRENDRE EN CHARGE LES MINUSCULES
__declspec(naked) double __fastcall HexaTenToDbl(char *pszhexa)
{
  __asm {
    push    esi
    push    ebx
    mov     esi, ecx
    sub     esp, 12
    mov     ebx, 10
fromHEXATEN:
    call    HexaToByte
    test    eax, eax
    js      short errHEXA
    add     esi, 2
    sub     ebx, 1
    mov     ecx, esi
    mov     byte ptr[esp+ebx], al
    jnz     short fromHEXATEN
    fld     tbyte ptr[esp]
    jmp     short tenEXIT
errHEXA:
    fldz
tenEXIT:
    add     esp, 12
    pop     ebx
    pop     esi
    ret     0
  }
}

// PROCEDURE DE TEST
void __stdcall Teste()
{
  char buf[24];
  sprintf(buf, "%.4f", HexaTenToDbl("4005F6EA7EF9DB22E000"));
  MessageBox(0, buf, "OK", 0);
}

// POINT D'ENTREE DU PROG
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE x, PSTR y, int z)
{
  Teste();
  return 0;
}


ciao...
BruNews, MVP VC++


vendredi 24 novembre 2006 à 20:39:15 | Re : Binaire vers nombre long

BruNews

Administrateur CodeS-SourceS
1 MOV en benef:

__declspec(naked) DWORD __fastcall HexaToByte(char *pszhexa)
{
  __asm {
    or      eax, -1   ;// PRESUME ERREUR
    mov     dl, byte ptr[ecx+1]
    mov     al, byte ptr[ecx]
    cmp     al, 48
    jb      short btEXIT
    cmp     dl, 48
    jb      short btEXIT
    cmp     al, 70
    ja      short btEXIT
    cmp     dl, 70
    ja      short btEXIT
    cmp     al, 65
    jae     short hiAF
    cmp     al, 57
    ja      short btEXIT
    sub     al, 48
    jmp     short hiOK
hiAF:
    sub     al, 55
hiOK:
    cmp     dl, 65
    jae     short loAF
    cmp     dl, 57
    ja      short btEXIT
    sub     dl, 48
    jmp     short loOK
loAF:
    sub     dl, 55
loOK:
    shl     al, 4
    add     al, dl
    and     eax, 0FFh
btEXIT:
    ret     0
  }
}

ciao...
BruNews, MVP VC++

vendredi 24 novembre 2006 à 20:54:47 | Re : Binaire vers nombre long

BruNews

Administrateur CodeS-SourceS
Bon allez, à la demande générale voici version définitive:

SUPPRIMER fonction HexaToByte() devenur inutile.
Ne conserver que ceci:

__declspec(naked) double __fastcall HexaTenToDbl(char *pszhexa)
{
  __asm {
    push    ebx
    sub     esp, 12
    mov     ebx, 10
fromHEXATEN:
    mov     dl, byte ptr[ecx+1]
    mov     al, byte ptr[ecx]
    cmp     al, 48
    jb      short errHEXA
    cmp     dl, 48
    jb      short errHEXA
    cmp     al, 70
    ja      short errHEXA
    cmp     dl, 70
    ja      short errHEXA
    cmp     al, 65
    jae     short hiAF
    cmp     al, 57
    ja      short errHEXA
    sub     al, 48
    jmp     short hiOK
hiAF:
    sub     al, 55
hiOK:
    cmp     dl, 65
    jae     short loAF
    cmp     dl, 57
    ja      short errHEXA
    sub     dl, 48
    jmp     short loOK
loAF:
    sub     dl, 55
loOK:
    shl     al, 4
    add     ecx, 2
    add     al, dl
    sub     ebx, 1
    mov     byte ptr[esp+ebx], al
    jnz     short fromHEXATEN
    fld     tbyte ptr[esp]
    jmp     short tenEXIT
errHEXA:
    fldz
tenEXIT:
    add     esp, 12
    pop     ebx
    ret     0
  }
}


ciao...
BruNews, MVP VC++


1 2

Cette discussion est classé dans : nombre, long, binaire, décrypter, f6e9


Répondre à ce message

Sujets en rapport avec ce message

Besoin aide sur fonction Min et Max dans Macro Excel [ par Baboune ] Bonjour,je voudrai utiliser la fonction Min et Max suivante de TomAmplius mais je n'y comprend rien !Je voudrai aussi l'associer avec la fonction de c Probleme avec les boucles For et le If ?? ou autre chose !??? [ par RaZoR ] Ce petit programme me permet seulement de tester une petite routine d'un de mes projet !! Cette routine consiste a ouvrir un fichier .bmp en lecture b Nombre de mots dans une phrase et mot le plus long [ par SUBMAIN ] Voila je voudrais savoir comment faire un programme qui saisisse une phrase et affiche :-le nombre de mots dans cette phrase.-Le mot le plus long et l RGB HEX et long nombre [ par ebwm ] bonjourquand on fait un source.backcolor (par exemple) on obtient un nombre du genre 9459964, comment convertir ce nombre en RGB ou HEX (rgb(252,84,14 long nombre ver s RGB [ par ebwm ] bonjourquand on fait un source.backcolor (par exemple) on obtient un nombre du genre 9459964, comment convertir ce nombre en RGB ou HEX (rgb(252,84,14 Relire en Vb un nombre float dans un fichier binaire [ par cuq ] Bonjour J'ai un fichier binaire qui contient des nombre de type "float" donc codé sur 32 byte .Comment relire ce nombre en VB .J'ai une solution qui r Decimale ou Binaire ? [ par jmtoulon ] Bonjour,voila, je souhaiterais créer un module qui gère les grands nombres.Seulement mon probleme est que je c'est pas si je dois faire les traitement Creation de fichier binaire->choix du nombre de bits [ par mi12ox ] Bonjour, je suis en train de travailler sur un projet de compression d'images utilisant différents algorithmes. j'utilise pour cela l'écriture de fich pb avec inet_ntoad de winsock [ par xerque ] Bonjour,J'ai un pb avec inet_ntoad(nombre as long ). Cette fonction permet de changer un long en adresse IP lisible. Cependant si mon nombre dépasse l Binaire Currency [ par pascalparis ] quelle est la norme qui définie la traduction en binaire d'un nombrede type Currencyou comment peut-on traduire en binaire un nombre Currency"j'ai cel


Nos sponsors

Sondage...

CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,218 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.