Сейчас на форуме: tyns777, zds, JustLife, 2nd, morgot (+5 невидимых)

 eXeL@B —› Программирование —› ASCII to HEX (masm)
Посл.ответ Сообщение

Ранг: 221.3 (наставник), 135thx
Активность: 0.190.07
Статус: Участник

Создано: 30 июня 2009 07:19
· Личное сообщение · #1

В общем такая проблема, в эдите есть текст, только цифры, допустим 54321, что в хекс варианте выглядит как D431. Получаю я их значит в переменную, в памяти они записываюцо как 35 34 33 32 31, а надо как D4 31. Смотрел сорцы калькулятора какого то чуть сума не сошел. Мб кто знает как можно это осуществить без особых танцев с бубном?

-----
xchg dword [eax], eax




Ранг: 39.2 (посетитель), 16thx
Активность: 0.020
Статус: Участник

Создано: 30 июня 2009 07:46
· Личное сообщение · #2

Это делает функция atodw из masmlib.
Справочник по различним функциям masmlib: \masm32\help\masmlib.chm



Ранг: 85.5 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 30 июня 2009 07:59 · Поправил: DMD
· Личное сообщение · #3

v0id2k
так подойдет? варианты, одним словом,,,,

Code:
  1.          mov       edi, 33414335h                          ; HEX-value
  2.          invoke    _ltoa, edi, buffer_A, 0Ah               ; HEX-value -> DEC-string (ASCII)
  3.          add       esp, 0Ch
  4.  
  5.          invoke    _ltoa, edi, buffer_B, 10h               ; HEX-value -> HEX-string (ASCII)
  6.          add       esp, 0Ch
  7.  
  8.          invoke    atoi, buffer_A                          ; DEC-string -> HEX-value (EAX)
  9.          add       esp, 0Ch   
  10.  
  11.          mov       edi, 316650h
  12.          mov       dword [buffer_C], edi
  13.  
  14.          invoke    _ltoa, dword [buffer_C], buffer_A, 0Ah  ; HEX-value -> DEC-string (ASCII)
  15.          add       esp, 0Ch
  16.  
  17.          invoke    _ltoa, dword [buffer_C], buffer_B, 10h  ; HEX-value -> HEX-string (ASCII)
  18.          add       esp, 0Ch          





Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 30 июня 2009 08:33 · Поправил: Coderess
· Личное сообщение · #4

Dec = 54321; ASCII = 35 34 33 32 31;

Отнять 30 и уже складывать


.data

lpStr db 35,34,33,32,31
nlen = $ - lpStr
Code:
  1. .code
  2. start:
  3. xor      eax, eax
  4. xor      ebx, ebx
  5. xor       edx, edx
  6. mov      ecx, nlen
  7. __1:    
  8. mov     bl, byte ptr [lpStr + edx]
  9. sub          bl, 30  
  10. imul    eax, eax, 0Ah
  11. add     eax, ebx
  12. inc     edx
  13. dec     ecx
  14. test    ecx, ecx
  15. jnz     __1
  16.  
  17. ret
  18. end start


-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 30 июня 2009 09:29
· Личное сообщение · #5

Поиск в помощь
http://www.exelab.ru/f/action=vthread&forum=6&topic=4331

-----
127.0.0.1, sweet 127.0.0.1





Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 30 июня 2009 10:05
· Личное сообщение · #6

Coderess

Возможно и так... типа оптимизации

Code:
  1.  
  2.  
  3.    1. .code
  4.    2. start:
  5.    3. xor      eax, eax
  6.    4. xor      ebx, ebx
  7.    5. xor       edx, edx
  8.    6. mov      ecx, nlen
  9.    7. __1:    
  10.    8. mov     bl, byte ptr [lpStr + edx]
  11.    9. sub          bl, 30  
  12.   10. imul    eax, eax, 0Ah
  13.   11. add     eax, ebx
  14.   12. inc     edx
  15.   13. dec     ecx
  16.   15. jnz     __1
  17.   16.  
  18.   17. ret
  19.   18. end start
  20.  
  21.  


или вместо 15. jnz __1 использовать loop

-----
aLL rIGHTS rEVERSED!





Ранг: 238.8 (наставник), 67thx
Активность: 0.20
Статус: Участник
CyberHunter

Создано: 30 июня 2009 10:24
· Личное сообщение · #7

Code:
  1.  
  2.          .586
  3.          .model flat, stdcall
  4.          option casemap :none
  5.  
  6.  
  7.  
  8. .data
  9.  
  10. chislo db  "356", 0
  11.  
  12.  
  13.  
  14.  
  15. .data?
  16. decode db 4h dup (?)
  17.  
  18.  
  19.  
  20. .code
  21.  
  22. start:
  23.  
  24. MOV EAX, offset chislo; ASCII "356"
  25.  
  26. PUSH EDI
  27. PUSH EBX
  28. MOV EDI,EAX
  29. MOV ECX,-1
  30. XOR EAX,EAX
  31. REPNE SCAS BYTE PTR ES:[EDI]
  32. NOT ECX
  33. DEC ECX
  34. JE xxx
  35. SUB EDI,2
  36. XOR EBX,EBX
  37. INC EAX
  38. MOV DWORD PTR DS:[decode],EAX
  39.  
  40. next:
  41.  
  42. XOR EAX,EAX
  43. MOV AL,BYTE PTR DS:[EDI]
  44. CMP AL,02Dh
  45. JE next2
  46. AND AL,0Fh
  47. MUL DWORD PTR DS:[decode]
  48. ADD EBX,EAX
  49. IMUL EAX,DWORD PTR DS:[decode],0Ah
  50. MOV DWORD PTR DS:[decode],EAX
  51. DEC EDI
  52. DEC ECX
  53. JNZ next
  54. JMP next3
  55.  
  56. next2:
  57.  
  58. NEG EBX
  59. next3:
  60.  
  61. MOV EAX,EBX ; Результат в EAX
  62. xxx:
  63. end start
  64.  
  65.  


-----
Nulla aetas ad discendum sera




Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 30 июня 2009 10:39
· Личное сообщение · #8

в принципе как и у всех

Code:
  1. dec2hex proc uses esi ecx string_addr:DWORD,string_leight:DWORD
  2.  
  3. mov esi, string_addr
  4. xor ecx,ecx
  5. xor eax,eax
  6. @dec2hex:
  7.  
  8.         MOV CL,0Ah
  9.         MUL ECX
  10.         MOV CL,BYTE PTR DS:[ESI]
  11.         INC ESI
  12.         SUB CL,030h
  13.         ADD EAX,ECX
  14.         DEC string_leight
  15.         JNZ @dec2hex
  16.  
  17.          Ret
  18. dec2hex endp





Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 30 июня 2009 11:11
· Личное сообщение · #9

v0id2k

Братан! Код в студию... Мы его тебе щас допишем и оптимизируем за одно

-----
aLL rIGHTS rEVERSED!





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 30 июня 2009 11:51
· Личное сообщение · #10

всё есть в стандартной библиотеке masm32
если интересно, сорс тут: \masm32\m32lib\atodw.asm

для использования достаточно добавить в сорс:

Code:
  1. atodw    Proto       :DWORD         ; return value in eax
  2.  
  3. includelib        masm32.lib


использование:

Code:
  1. atodw    Proto       :DWORD         ; return value in eax
  2.  
  3. includelib        masm32.lib
  4.  
  5. .data
  6. szHexMask         db      "Hex: %08X",0
  7.  
  8. .data?
  9. hEdValue HWND     ?
  10. sValue   db 40h dup (?)
  11.  
  12.  
  13. .code
  14.  
  15. invoke   GetWindowText,hEdValue,addr sValue,sizeof sValue
  16. invoke   atodw,addr sValue
  17. invoke   wsprintf,addr sValue,addr szHexMask,eax
  18. invoke   SetWindowText,addr sValue


вместо wsprintf можно использовать dw2hex

-----
EnJoy!




Ранг: 221.3 (наставник), 135thx
Активность: 0.190.07
Статус: Участник

Создано: 30 июня 2009 13:38
· Личное сообщение · #11

Уф сколько вариантов, неожидал столько увидеть =) Вечером как дома буду код выложу

-----
xchg dword [eax], eax




Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 30 июня 2009 13:45 · Поправил: cppasm
· Личное сообщение · #12

v0id2k если не секрет - зачем всё так сложно?
Из edit box можно получать значение как число, а не в виде строки.
И дальше при выводе его преобразовывать как хочешь.




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 30 июня 2009 14:43
· Личное сообщение · #13

cppasm пишет:
Из edit box можно получать значение как число, а не в виде строки.


Ты пример кода человеку дай...

-----
aLL rIGHTS rEVERSED!




Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 30 июня 2009 15:11
· Личное сообщение · #14

DaRKSiDE пишет:
Ты пример кода человеку дай...

Code:
  1. invoke GetDlgItemInt,hWin,IDC_EDIT1,addr temp,TRUE





Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 30 июня 2009 18:42
· Личное сообщение · #15

До кучи..

aa3d_30.06.2009_CRACKLAB.rU.tgz - DecStrToDword.asm

-----
invoke OpenFire




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 30 июня 2009 22:15
· Личное сообщение · #16

Такая простая задача, а развели флуд.


 eXeL@B —› Программирование —› ASCII to HEX (masm)
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати