Decodage ieee754

Contenu du snippet

decodage d'un nombre sur quatre octets (32 bits) au format ieee754 simple precision. La fonction retourne un float pour permettre une gestion plus simple ensuite. Evidemment cette routine est portable mais necessite plus de calculs que l'evidente bete copie des 4 octets a l'adresse d'une variable float qui elle n'est pas tout a fait portable suivant le type de processeur intel, motorola et autres.

Source / Exemple :


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

float tst3_cnv( long cnv_value )
{
	long 	cnv_valuesign, cnv_vexp, cnv_vmantisse;
	int 	cnv_vloop1;
	float	cnv_vfloat1;

	cnv_vfloat1=1.0;
	cnv_valuesign=1;
	cnv_vexp=0;
	cnv_vmantisse=0;
	cnv_vloop1=0;

	if( cnv_value & 0x80000000 )
	{
		cnv_valuesign=-1;
	}
	printf( "bitsign = %d\n", cnv_valuesign );
	cnv_vexp=((cnv_value>>23)& 0xFF)-127;
/*	printf( "exp = %d\n", cnv_vexp ); */
	cnv_vloop1=23;
	cnv_vmantisse=cnv_value & 0x007FFFFF;
	do
	{
		if( cnv_vmantisse & 0x1 )
		{
			cnv_vfloat1+=pow(2,-(cnv_vloop1));
		}
		cnv_vmantisse>>=1;
		cnv_vloop1--;
/*		printf( "float1 = %f\n", tst3_vfloat1 ); */
	}
	while ( cnv_vloop1>0 );
	cnv_vfloat1*=cnv_valuesign;
	cnv_vfloat1*=pow( 2, cnv_vexp );
/*	printf( "value in float = %f\n", tst3_vfloat1*pow(2,tst3_vexp)); */
	return( cnv_vfloat1 );		
}
int main( int argc, char *argv[] )
{
	float value;

	value = tst3_cnv( 0xBF800000 );
	printf( "value = %f\n", value );

	value = tst3_cnv( 0x40E3F34D );
	printf( "value = %f\n", value );

	value = tst3_cnv( 0xC2ED4000 );
	printf( "value = %f\n", value );	

	return(0);	
}

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (selligattangip)