Conversion entier -> chaine de caracteres

Contenu du snippet

cette fonction ecrite en asm, englobée dans une structure de programme C permet de convertir un entier signé (positif ou non) en sa représentation sous forme de chaine de caractères.

Source / Exemple :


#include <malloc.h>

char *int32tochar(int n){
	char *ret_buf = (char *)calloc(12,1);
	char buf[12]={0};
	char sign=0;

	__asm{
			mov ebx,n
			mov eax,n
			shr eax,31					// on va ne garder que le bit de poids
			cmp eax,1					// le plus fort, celui qui donne le signe
			jnz not_signed_1
			mov sign,1

not_signed_1:
			mov ecx,10					// le diviseur reste fixe a 10
			xor edi,edi

while_ebx_not_0:
			mov eax,ebx
			cmp sign,1					// si l'entier est signe on a pas besoin de mettre les
			jnz not_signed_2			// bits de edx a 1
			mov edx,0xFFFFFFFF
			idiv ecx					// on divise le nombre de 64bits [edx-eax] par ecx
			xor dl,0xFF					// le reste va dans edx, le quotient dans eax
			inc dl						// on convertit le reste en unsigned par un complement a 2 +1
			jmp suite_div

not_signed_2:
			xor edx,edx					// si l'entier est non signé, on met tous les bits de edx a 0
			div ecx						// div est fait comme idiv une division mais sur des non signes

suite_div:
			add dl,'0'
			mov byte ptr[buf+edi],dl	// on remplit le tableau
			inc edi
			mov ebx,eax					// le quotient repars dans le nombre qui va subir
			cmp ebx,0					// d'autres divisions
			jnz while_ebx_not_0
			cmp sign,1					// si l'entier est signe on rajoute le signe -
			jnz end_convert_proc
			mov byte ptr[buf+edi],'-'
			inc edi

end_convert_proc:						// a partir de la commence la procedure d'inversion
			dec edi						// de la chaine
			mov esi,edi
			mov edi,ret_buf

while_al_not_0:
			mov al,byte ptr[buf+esi]
			mov byte ptr[edi],al
			dec esi
			inc edi
			cmp esi,0
			jnz while_al_not_0
	}

	return ret_buf;
}

Conclusion :


si vous avez des suggestions pour améliorer ce code, ben dite le

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.