Code Hexa vers Flottant IEEE 754 32 Bits

Fermé
Pitosuki - 20 févr. 2012 à 13:39
 Pitosuki - 21 févr. 2012 à 10:59
Bonjour,

Je récupère un code hexadécimal prévu pour être décrypté en flottant.

J'ai fait la conversion à la main de 34CC79F6 je retrouve bien la valeur que je cherche soit 3.58*10e-7.
IEEE 754 32 Bits = 1bit exposant, 8bits d'exposant et 23bits de mantisse.

Je cherche un code CVI ou une fonction en c ( ou avec l'aide d'une librairie Labwindows/CVI) qui puisse faire cela.

Je pense que cela dois se trouver mais mes recherches sur Google sont infructueuses.

Merci à vous pour votre aide.

Bien Cordialement

Pitosuki

A voir également:

4 réponses

slt ; éventuellement :

Hex to Flottant - Recherche Google :
http://www.google.fr/search?hl=fr&q=Hex+to+Flottant&gbv=1

Hex to Float - Recherche Google :
http://www.google.fr/search?hl=fr&q=Hex+to+Float&gbv=1

Représentation des données :
http://www.liafa.jussieu.fr/~carton/Enseignement/Architecture/Cours/Coding/index.html

Les fonctions C suivantes permettent de considérer un flottant comme un entier et inversement afin par exemple d'afficher le codage hexadécimal d'un flottant. Il n'est pas possible d'utiliser les cast directement sur les valeurs car cela effectuerait une conversion. On utilise au contraire un cast sur les pointeurs.

// On suppose sizeof(int) == sizeof(float)
int float2int(float f) {
  int* p = (int*) &f;
  return *p;
}

float int2float(int n) {
  float* p = (float*) &n;
  return *p;
}

int main(void) {
  // Float --> hexa
  printf("%08x\n", float2int(-0.84375));

  // Hexa --> float
  printf("%g\n", int2float(0xbf580000));
}
1
librequetucrois
20 févr. 2012 à 18:06
slt re : Éventuellement avec une de ces librairies :

#include <stdio.h>
#include <limits.h>
#include <math.h>

Il y a un bout de code ici :

Convert Float to Int - C++ MFC - Forums at ProgrammersHeaven.com :
http://www.programmersheaven.com/mb/mfc_coding/224205/224205/convert-float-to-int/

#include <stdio.h>
#include <limits.h>
#include <math.h>

int float2int(float f)
{
    return (int)(f / 180.0 * INT_MAX);
}

float int2float(int i)
{
    return (float)(i * 180.0 / INT_MAX);
}

int main()
{
    float f0, f1;
    int   i;

    do {
        printf("f0: "); scanf("%f", &f0);
    } while (fabs(f0) > 180.0);

    i = float2int(f0); printf("i: %d\n", i);
    f1 = int2float(i); printf("f1: %g\n", f1);

    return 0;
}


+

convertir une chaine contenant un HEX en FLOAT (en C) [Résolu] - Forum des professionnels en informatique :
http://www.developpez.net/forums/d1109815/c-cpp/c/convertir-chaine-contenant-hex-float-c/

Le code est différent mais il est indiqué "inclure stdlib.h"

Interpréter une chaîne de caractères comme s'il s'agissait de la représentation hexadécimale d'un float ; inclure stdlib.h :

float float_from_hex(const char * str)
{
    int n = strtoul(str, NULL, 16);
    return *((float *)&n);
}
1
Bonjour,

Merci à vous, je viens de tester cela. Je suis sous LabWindows/CVI est le programme ne reconnait par int2float (dans mon cas hexa vers flottant). Connaitrez-vous la librairie CVI qu'il semble me manquer ou une autre façon de faire cela.


Cordialement,

Pierre
0
Merci pour ton aide pour le moment je n'y arrive pas à faire cette conversion, je ne retrouve pas le résultat que je cherche.

Par exemple mon code hexa que je reçois peut-être: 34CC79F6, j'ai fait ma conversion à la main est je trouve 3.57e-7 (ce qui est verifié sur l'IHM de mon appareil.

Mais je n'arrive pas à retrouver ce resultat par conversion CVI.

Je continue à chercher une solution,

Bien cordialement,

Pitosuki
0