Добрый день Известно ли какое-нибудь решение которое может перевести HEX в его ASCII представление, Конкретно мне надо хеш из 16 ричного вида перевести в ASCCII кодировку. Трабла заключается в том, что в традиционном ASCII представлении хеша для байта используется 2 символа(то есть hex визуально выраженный через ASCII). Я пытался написать код, вроде даже сделала его максимально очевидным и понятным, но всё равно чё-то не пашет. Код (Text): .386 .model flat, stdcall ; 32 bit memory model option casemap :none ; case sensitive include c:\masm32\include\windows.inc include c:\masm32\include\kernel32.inc include c:\masm32\include\shell32.inc include c:\masm32\include\user32.inc include c:\masm32\include\GDI32.inc include c:\masm32\include\comdlg32.inc include c:\masm32\include\COMCTL32.inc include c:\masm32\include\cryptohash.inc include c:\masm32\include\ole32.inc include c:\masm32\include\wininet.inc include c:\masm32\include\url.inc include c:\masm32\include\masm32.inc include c:\masm32\include\wsock32.inc include c:\masm32\include\mpr.inc includelib c:\masm32\lib\mpr.lib includelib c:\masm32\lib\wsock32.lib includelib c:\masm32\lib\url.lib includelib c:\masm32\lib\wininet.lib includelib c:\masm32\lib\ole32.lib includelib c:\masm32\lib\GDI32.lib includelib c:\masm32\lib\comdlg32.lib includelib c:\masm32\lib\COMCTL32.lib includelib c:\masm32\lib\cryptohash.lib includelib c:\masm32\lib\user32.lib includelib c:\masm32\lib\kernel32.lib includelib c:\masm32\lib\shell32.lib includelib c:\masm32\lib\masm32.lib ;######################################################################### ;####################################Объявляем переменные####################### ;;;;;;;;;;;;;константы;;;;;;;;;;;;;;; .data FileName db "md5.txt",0 FileNameASCII db "md5ASCII.txt",0 string db "test",0 stringSize = ($-string) char db "0123456789ABCDEF",0 md5 dd ? md5ascii dd ? hFile dd ? bWritten dd ? pmd5ASCII dd ? mHandle dd ? ;===========================НАЧИНАЕТСЯ КОД======================================= .code start: invoke MD5Init invoke MD5Update, addr string, stringSize invoke MD5Final mov md5,eax invoke GlobalAlloc,GMEM_FIXED,17 ; Выделяем память для буфера считываемых данных mov mHandle,eax invoke GlobalLock,eax mov pmd5ASCII, eax mov eax,17 mov ebx,md5 mov ecx,pmd5ASCII .while eax!=0 push eax mov eax,[ebx] shr eax,5 mov edx,0h .IF eax==edx mov edx, offset char add edx,0 mov edx,[edx] mov [ecx],edx .ENDIF mov edx,1h .IF eax==edx mov edx, offset char add edx,1 mov edx,[edx] mov [ecx],edx .ENDIF mov edx,2h .IF eax==edx mov edx, offset char add edx,2 mov edx,[edx] mov [ecx],edx .ENDIF mov edx,3h .IF eax==edx mov edx, offset char add edx,3 mov edx,[edx] mov [ecx],edx .ENDIF mov edx,4h .IF eax==edx mov edx, offset char add edx,4 mov edx,[edx] mov [ecx],edx .ENDIF mov edx,5h .IF eax==edx mov edx, offset char add edx,5 mov edx,[edx] mov [ecx],edx .ENDIF mov edx,6h .IF eax==edx mov edx, offset char add edx,6 mov edx,[edx] mov [ecx],edx .ENDIF mov edx,7h .IF eax==edx mov edx, offset char add edx,7 mov edx,[edx] mov [ecx],edx .ENDIF mov edx,8h .IF eax==edx mov edx, offset char add edx,8 mov edx,[edx] mov [ecx],edx .ENDIF mov edx,9h .IF eax==edx mov edx, offset char add edx,9 mov edx,[edx] mov [ecx],edx .ENDIF mov edx,10h .IF eax==edx mov edx, offset char add edx,10 mov edx,[edx] mov [ecx],edx .ENDIF mov edx,11h .IF eax==edx mov edx, offset char add edx,11 mov edx,[edx] mov [ecx],edx .ENDIF mov edx,12h .IF eax==edx mov edx, offset char add edx,12 mov edx,[edx] mov [ecx],edx .ENDIF mov edx,13h .IF eax==edx mov edx, offset char add edx,13 mov edx,[edx] mov [ecx],edx .ENDIF mov edx,14h .IF eax==edx mov edx, offset char add edx,14 mov edx,[edx] mov [ecx],edx .ENDIF mov edx,15h .IF eax==edx mov edx, offset char add edx,15 mov edx,[edx] mov [ecx],edx .ENDIF mov edx,16h .IF eax==edx mov edx, offset char add edx,16 mov edx,[edx] mov [ecx],edx .ENDIF pop eax inc ecx inc ebx dec eax .endw invoke MessageBox, NULL, md5, addr string, MB_OK + MB_ICONSTOP invoke MessageBox, NULL, pmd5ASCII, addr string, MB_OK + MB_ICONSTOP invoke CreateFile, offset FileName, GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, 0, 0 mov hFile, eax invoke WriteFile, hFile, md5, 16, addr bWritten, NULL invoke CloseHandle, hFile invoke CreateFile, offset FileNameASCII , GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, 0, 0 mov hFile, eax invoke WriteFile, hFile, pmd5ASCII, 16, addr bWritten, NULL invoke CloseHandle, hFile invoke GlobalUnlock,pmd5ASCII invoke GlobalFree,mHandle ret end start Этот код даже не полностью хеш должен кодировать в ascii а только старшую половину каждого байта. Если есть идеи что не так - пишите. Спасибо.
lust Все просто. К чему столько мучений Код (Text): .data hextbl db '0123456789ABCDEF' .code ... mov ebx, offset hextbl mov ecx, 16 mov esi, offset hexstr mov edi, offset ascistr @@loop: lodsb mov ah, al and ax, 0FF0h shr al, 4 xlat rol ax, 8 xlat shl ah, 4 or al, ah stosb loop @@loop