Archiv verlassen und diese Seite im Standarddesign anzeigen : Win32-API Stringfunktion gesucht.
Hallo, ich wäre ziemlich dankbar, wenn mir jemand helfen könnte.
Ich suche eine Stringfunktion zum Unwandeln von Integer nach String bezüglich Assemblerprogrammierung, vielleicht gibt's da ja einen anderen Weg.
Ja, wär' toll *g*.
dafuer gibt es keine API und in asm darfste dir das wohl selbst schreiben :(
Hmm, ich dachte es bloß, da es ja für so Stringspielereien wie den ganzen Inhalt eines Strings in Groß-/Kleingeschriebenes zu verwandeln auch gibt, muss es doch irgendwie möglich sein, den Zahlenwert von z.B. eax als String in einer Messagebox wiedergeben zu können, ohne z.B. die Zahl 31 durch 10 zu teilen, um die Zehnerstellen zu erlangen, dann die Einer.. um dann für jede Ziffer den Zeichencode in einen seperaten String zu adden.
Aber danke schonmal für die Antwort.
ich glaube nicht dass es funktionen wie uppercase als api gibt, die sind mir nie untergekommen kannst du mal den namen der api posten, weil ich ehrlich gesagt bezweifle dass des ne api is
CharLower und CharUpper in der user32.dll machen obengenanntes.
die funktionen kannte ich nichtmal, aber int nach string oder umgekehrt gibts nuecht:( :(
Also, wenn du einen Integer in einen String umwandeln willst benutzt du folgende API:
char out[]="";
int zahl;
wsprintf(out,"%li",zahl);
in out steht jetzt die zahl als string!
Wenn du String in Zahl umwandeln willst (in asm) mache es so:
(string in ecx, zahl am ende in edi)
(ich hab asm längere zeit nicht mehr benutzt und bin nicht sicher ob die "cdq" opcodes bei imul notwendig sind)
push ecx
call lstrlen // str-länge in eax
loop1:
movsx edx, byte ptr [ecx] // erster char nach edx
sub edx, 32h // bsp. Buchstabe "9" - 0x32 ist 9 (zahl)
push eax
push ecx
mov ecx,10
cmp eax, 1 // wenn letzte zahl multiplikator
je hop // ist automatisch 10
loop2: // multiplikator ausrechnen
not eax
cdq
imul ecx,10
inc eax
test eax,eax
jne loop2
hop:
cdq
imul edx, ecx
add esi, edx
test eax, eax
pop ecx
pop eax
jne loop1
Felix Kaiser
06.08.2002, 20:56
Ja, wäre notwendig. Multiplikations- und Divisionsoperatoren erfordern immer ein Leeres (E)DX, da sonst das Ergebnis falsch wird, wenn man allein mit DWORDs rechnen will.
Allerdings würd ich noch zwei Vergleiche einbauen, die prüfen, ob das Zeichen gültig ist (0x30..0x39) und natürlich aufs Vorzeichen achten :)
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.