Conversion

Résolu
cs_noel70 Messages postés 40 Date d'inscription samedi 22 mai 2004 Statut Membre Dernière intervention 25 janvier 2007 - 6 févr. 2005 à 15:17
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 29 oct. 2005 à 15:57
Bonjour a tous.
Voila le programme sous Masm32, et sous Masm32, il existe une procedure pour convertir des valeurs numeriques en des valeurs ascii, et ceci pour que ces valeurs puisse être lu par l'utilisateur dans une EDITBOX par exemple.
Cette procedure est appelle dwtoa.

Mais voila je me demandais s'il existait une procedure qui fait l'inverse, c 'est a dire que convertit une valeur ascii en des valeurs numeriques.
Car ce que je voudrais recupere dans une EDITBOX, c'est ceci:

Exemple: Dans l' EDITBOX, l'utilisateur ecrit 123
Apres qu'on es utilise l'API GetDlgItemTextA, pour recuperer ce qu'il est ecrit dans cette EDITBOX, on recupere dans notre adresse memoire utilise avec l'API GetDlgItemTextA les valeurs suivantes 31 32 33, ce qui correspond a la valeur hexadecimal des caractere ascii 1 2 3,

Voila, moi ce que voudrais pouvoir recupere c 'est ce qui est ecrit la EDITBOX mais sous la meme forme, c'est a dire l'utilisateur ecrit 123, je voudrais recuperer la valeur 123 et non 31 32 33.

Si quelqu'un pourrait m'aider, Merci.

7 réponses

BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
6 févr. 2005 à 16:38
atoi PROC ; IN: EAX = *psz
push ebx
mov ecx, eax
xor ebx, ebx
xor eax, eax
xor edx, edx
cmp byte ptr[ecx], '-'
jne short nbrLoop
inc ecx
mov edx, -1
nbrLoop:
mov bl, [ecx]
cmp bl, '0'
jb short nbrStop
cmp bl, '9'
ja short nbrStop
lea eax, [eax+eax*4] ; eax = eax * 5
sub bl, '0'
add eax, eax
inc ecx
add eax, ebx
jmp short nbrLoop
nbrStop:
add eax, edx
pop ebx
xor eax, edx
ret 0
atoi ENDP

ciao...
BruNews, MVP VC++
3
cs_noel70 Messages postés 40 Date d'inscription samedi 22 mai 2004 Statut Membre Dernière intervention 25 janvier 2007
6 févr. 2005 à 17:09
Merci, tu es trop fort
0
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
7 mars 2005 à 06:24
Juste à titre d'information j'ai posté un source qui s'appelle MENU DE CONVERSION: http://www.asmfr.com/code.aspx?ID=19287

Il y a les conversions:
Caractère -> code ASCII
code ASCII -> Caractère
HEXA -> Décimal
Décimal -> HEXA

Il y a des saisies et des affichage, il y a donc l'équivalent des fonctions atoi et itoa

Core Breaker
0
xpert1337 Messages postés 3 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 13 août 2005
13 août 2005 à 03:14
Voila moi c'est le mem cas mais je ne comprend pa ta procedure moi je programme en MASM32 mais ta procedue je ne la comprend pa commen fonctionne -t- elle ou alors commente un peu plus ton code merci quand meme ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
13 août 2005 à 09:34
"en MASM32" n'a pas de sens, c'est asm ou non, ma procédure atoi est aussi assemblée sur MASM32.

On met l'adresse de la chaine dans ECX avant le call:
mov ecx, offset chaine
call atoi
comme normal le résultat est dans EAX en sortie.
Au début on met ECX = EAX et on met EAX à zéro pour le retour.
Tant qu'on n'atteint pas le terminateur NULL de fin de chaine et que ECX pointe sur un octet compris entre '0' et '9', EAX = EAX*10 + val(ECX) - val('0') et puis on pousse ECX.
Enfin rien que du normal, juste qu'il faut remlacer la multiplication trop couteuse en cycles par un LEA suivi d'un ADD.

ciao...
BruNews, MVP VC++
0
bios4c44 Messages postés 3 Date d'inscription mardi 21 novembre 2000 Statut Membre Dernière intervention 7 mars 2007
29 oct. 2005 à 15:17
Merci pour le code il va bien me servir ;-)

Et à part ça je regrette mais "en MASM32" a du sens désolé (bien que pour être plus correct il eut fallu dire "sous MASM32") car des langages d'assemblages il en existe des tas (autant que d'architectures de processeurs...), tu me répondras que le x86 est l'asm dont on parle sur ce site mais le pb est que le code dépends aussi du compilateur utilisé donc un code TASM ou NASM peuvent être différents et non portables même si ils réalisent les mêmes opérations.

voili voilou je "m'offusquai" :-) un peu quand tu as répliqué c'est asm ou non si violemment au pauvre xpert1337...
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
29 oct. 2005 à 15:57
MASM définit qlqs macros mais en aucun cas un sabir particulier, c'est du pur standard Intel tel qu'on le voit dans les manuels Intel.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0