Bonjour, je voudrais convertir un string en hexadécimal vers du décimal double précision.
Voici le hex : 7E14AE47
qui devrait donner : 0.02 en décimal.
Je sais vraiment pas comment faire.
Bonjour, je voudrais convertir un string en hexadécimal vers du décimal double précision.
Voici le hex : 7E14AE47
qui devrait donner : 0.02 en décimal.
Je sais vraiment pas comment faire.
Euh, tu n'en as que pour 32 bits ici. C'est seulement de la simple précision...
Dans tous les cas, tu convertis ça en unsigned int (ou unsigned long si tu n'es pas sur une architecture LP64), puis tu fais un memcpy() vers un float (ou tu joues avec les reinterpret_cast<> de pointeurs)
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Eh bien, comme j'ai dit. En C, je ferais un strtoull() (C99, ou deux strtol() sinon) pour obtenir un long long, puis je ferais un memcpy() vers un double.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Eh non. Le strtoxxx n'est valable que pour du décimal, pas pour le hex.
Je crois qu'il faut passer par hex->bin->dec.
Là où tout ce complique c'est de le passer en 64bits.( du float).
Khexedit le fait très bien, je vois bien le nombre décimal exact sur 64bits.
Le problème c'est d'écrire un programme soi-même en c++ afin d'arriver à la même chose.
Pourquoi faire une recopie ? Autant tout mettre dans un tableau de unsigned chars, et caster le pointeur vers « double * ».
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include <iostream> using namespace std; int main (void) { unsigned char nombre[] = { 0x7E, 0x14, 0xAE, 0x47, 0xE1, 0x7A, 0x94, 0x3F }; cout << *(double *)nombre << endl; return 0; } $ ./double 0.02
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Partager