Сейчас на форуме: (+7 невидимых) |
eXeL@B —› Крэки, обсуждения —› MSVcrt.atol |
Посл.ответ | Сообщение |
|
Создано: 15 февраля 2005 18:31 · Личное сообщение · #1 ребят, тема можь уже поднималасъ но сам чего-то запарил. Подгружаецаа МСВКРТ.ДЛЛ и вызываецца функция атол. по крайней мере Олли так выдает. Голова уже кругом идет: преобразование строки чисел в длинное целое. Вродн так. тока вот что сие значит: atol (s[, base]) Convert string s to a long integer in the given base. The string must consist of one or more digits, optionally preceded by a sign ("+" or "-"). The base argument has the same meaning as for atoi(). A trailing "l" or "L" is not allowed, except if the base is 0. Note that when invoked without base or with base set to 10, this behaves identical to the built-in function long() when passed a string. И я точно знаю что навходе строка не только с цифрами, но и с буквами G,H,I. Не в лом если поясните плизе. |
|
Создано: 15 февраля 2005 18:48 · Поправил: geRC · Личное сообщение · #2 atol - это перегруженная функция, может иметь один или два аргумента. Первый - указатель на строку, а второй (если есть) - т.н. "база" - основание системы счисления. Если второй аргумент отсутствует, то полагается, что система счисления = 10 mopok пишет: И я точно знаю что навходе строка не только с цифрами, но и с буквами G,H,I. Не в лом если поясните плизе. Из этого следует, что у тебя в функцию передаются два аргумента: первый - указатель на строку, а второй - система счисления. Скорее всего, что второй аргумент в твоём случае равен 24h (=36d), т.е. ты имеешь дело с т.н. base-36, когда для представления числа используется алфавит из 36 символов, обычно это "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ". |
|
Создано: 15 февраля 2005 20:14 · Личное сообщение · #3 Convert_Digs db '0123456789abcdefghijklmnopqrstuvwxyz',0 ;Comment % ; Stone's KeyMaker Makers include functions ; ; Converts 64 bit number in EDX:EAX to string with any number base ; ; Input: DS:EDI => Place to put string ; EDX:EAX, number to convert ; ECX, Number base ; Output: String ; Registers changed: Them all? ; Flags : Many ; % Convert_Num proc near pushf pushAD sub esp, 4 mov ebp,esp cld mov esi, edi push esi ;--- loop for each digit sub bh, bh mov dword ptr [ebp], eax ;save low word mov dword ptr [ebp+4], edx ;save high word sub esi, esi ;count digits Connum1: inc esi mov eax, dword ptr [ebp+4] ;high word of value sub edx, edx ;clear for divide div ecx ;divide, DX gets remainder mov dword ptr [ebp+4],eax ;save quotient (new high word) mov eax, dword ptr [ebp] ;low word of value div ecx ;divide, DX gets remainder ; (the digit) mov dword ptr [ebp], eax ;save quotient (new low word) mov bl, dl mov al, byte ptr [Convert_Digs+ebx] ;get the digit stosb ;store cmp dword ptr [ebp], 0 ;check if low word zero jne Connum1 ;jump if not cmp dword ptr [ebp+4], 0 ;check if high word zero jne Connum1 ;jump if not sub al, al stosb ;store the terminator ;--- reverse digits pop ecx ;restore start of string xchg ecx, esi shr ecx, 1 ;number of reverses jz Connum3 ;jump if none xchg edi, esi sub esi, 2 ;point to last digit Connum2 : mov al, byte ptr [edi] ;load front character xchg al, byte ptr [esi] ;swap with end character stosb ;store new front character dec esi ;back up loopd Connum2 ;loop back for each digit ;--- finished Connum3 : add esp, 4 popad popf ret Convert_Num endp ;Convert_Num |
|
Создано: 15 февраля 2005 20:23 · Поправил: Nitrogen · Личное сообщение · #4 |
|
Создано: 15 февраля 2005 20:36 · Поправил: geRC · Личное сообщение · #5 |
|
Создано: 15 февраля 2005 21:00 · Личное сообщение · #6 |
eXeL@B —› Крэки, обсуждения —› MSVcrt.atol |