Conversion [Résolu]

cs_noel70 40 Messages postés samedi 22 mai 2004Date d'inscription 25 janvier 2007 Dernière intervention - 6 févr. 2005 à 15:17 - Dernière réponse : BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention
- 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.
Afficher la suite 

7 réponses

Répondre au sujet
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 6 févr. 2005 à 16:38
+3
Utile
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++
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de BruNews
cs_noel70 40 Messages postés samedi 22 mai 2004Date d'inscription 25 janvier 2007 Dernière intervention - 6 févr. 2005 à 17:09
0
Utile
Merci, tu es trop fort
Commenter la réponse de cs_noel70
CoreBreaker 540 Messages postés dimanche 23 mars 2003Date d'inscription 5 octobre 2007 Dernière intervention - 7 mars 2005 à 06:24
0
Utile
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
Commenter la réponse de CoreBreaker
xpert1337 3 Messages postés jeudi 23 novembre 2000Date d'inscription 13 août 2005 Dernière intervention - 13 août 2005 à 03:14
0
Utile
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 ;)
Commenter la réponse de xpert1337
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 13 août 2005 à 09:34
0
Utile
"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++
Commenter la réponse de BruNews
bios4c44 3 Messages postés mardi 21 novembre 2000Date d'inscription 7 mars 2007 Dernière intervention - 29 oct. 2005 à 15:17
0
Utile
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...
Commenter la réponse de bios4c44
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 29 oct. 2005 à 15:57
0
Utile
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++
Commenter la réponse de BruNews

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.