Karto marche plus, cherche kkchose similaire

Vous voulez discuter de Ryzom ? Prenez une chaise et venez siroter un cocktail dans le Général.
User avatar
benletib
Posts: 362
Joined: Mon Sep 27, 2004 9:00 am

Re: Karto marche plus, cherche kkchose similaire

Post by benletib »

WikiPedia est ton amie : http://fr.wikipedia.org/wiki/Ing%C3%A9nierie_inverse

Edit : Moi je ne suis pas convaincu par le fait qu'analyser les fichiers ICFG soit de l'Ingénierie Inverse au sens ou l'entend Nevrax...

Etan Chizuo Ka-chen
, surnomée Etchizka ou Etchi,
humble mage cartographe au service du peuple Zoraï, membre du Clan
Sckinook.
(Ancienne Da-Kwaï du Temple des Masques et Intendante des Cercles Zoraï)
[ Le Game Lore en PDFLes Chroniques d'Atys en PDF ]
User avatar
cyrille5
Posts: 517
Joined: Tue Sep 21, 2004 2:26 am

Re: Karto marche plus, cherche kkchose similaire

Post by cyrille5 »

Un ti post pour tout ceux qui luttent avec la conversion hexa ==> Float, j'ai trouvé et fait un ti algo de conversion en C. Langage utilisé a seul but de tester mes algos, je sais qu'il y a beaucoup plus simple de faire en C ;)

Il vous suffit donc de le comprendre et de le réimplementer dans votre langage préféré :p

Code: Select all

float binaryToFloat(long binary)
{
	/* s represents the sign, e the exponent and m the mantissa */
	char s = binary >> 31;
	unsigned char e = ((binary & 0x7fffffff) >> 23) - 127;
	long m = (binary & 0x007fffff) | (1 << 23);

	/* deleting non significant bits */
	while (!(m & 1))
		m>>=1;

	/* Finding the right coma position */
	char comaPos = 31 - e;
	long tmp = 0x80000000;
	while (!(m & tmp))
	{
		tmp>>=1;
		comaPos--;
	}
	
	/* conversion */
	float f = 0.;
	char i;
	for(i = 0; i < 32; i++)
		if(m & (1 << (i)))
			f += pow(2., (i-comaPos));

	s ? f*=-1 : true;
	return f;
}
Je pense avoir suffisement détaillé l'algo et ne pas l'avoir fait comme un porc. Si tout fois vous avez du mal a en saisir les subtilité, je pourrais faire un ti explicatif ;)
La fonction s'appelle avec un long qui contient la représentation binaire du flottant et retourne le flottant.

Edit : du code en bonus passage du code hexa lu en code binaire

Code: Select all

long hexToLong(char * hex)
{
	long binary = 0;
	char i;
	/* Little endian conversion */
	char dec[8] = {4, 0, 12, 8, 20, 16, 28, 24};

	for(i = 0; i < 8; i++)
		(*hex >= '0' && *hex <= '9') ? binary  |= (long)(*hex++ - '0') << dec[i] : binary  |= (long)(*hex++ - 'A' + 10) << dec[i];
	return binary;
}
Il suffit donc pour avoir le float correspondant a la chaine lue de lancer par exemple :

Code: Select all

binaryToFloat(hexToLong("D47A7645"));
Last edited by cyrille5 on Fri Aug 25, 2006 9:25 pm, edited 1 time in total.
Amina, jeune et jolie trykette, un peu peste et fusilière folle.
Les tryker, c'est beau, le reste, bah c'est moche !
Post Reply

Return to “Général”