Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для Windows/Dos > FASM взятие ASCII кода


Автор: Moky 15.4.2014, 16:15
Есть файл, txt, внем строка 'abcde'. Прочитать её можно с помощью функции ReadFile, но я увижу символы, может кто подскажет, как можно увидеть вместо символов ASCII коды этих символов.

Автор: 500mhz 15.4.2014, 17:23
Увидеть где?

Автор: Moky 16.4.2014, 19:22
Может я неправильно выразился. Нужна API функция которая возвращает ASCII код символа в текущей позиции курсора в текстовом файле. Т.Е. функция читает содержимое файла, но возвращает не символы а их ASCII коды. В DOS такая функция есть.

Автор: _zorn_ 17.4.2014, 04:13
Как ты думаешь в каком виде текст хранится в памяти ?
Чтобы "увидеть", заюзай что нибудь вроде intToStr

Автор: tzirechnoy 17.4.2014, 16:05
ReadFile всегда возвращает (в переданной для возврата строке) ASCII-коды символов для файла в кодировках ASCII.
Искренне Ваш, КО.

Автор: Moky 17.4.2014, 17:55
Вот код программы чтения данных из файла. Текстовый файл 1.txt состоит из двух строк abcde и klmno. Кажется все просто, но если замерить размер файла выяснится, то его размер составляет не 10 байт а 12. После первой строки скрыто два технических байта. Это возврат каретки и прогон листа. Если Вы воспользуетись  функцией ReadFile вы их не увидите, да и функция у меня возвращает символы, а не их ASCII коды.
Для примера простенький код, позаимствоный отчасти у Норсеева.
Заранее всем спасибо!

Код

format PE GUI 4.0
entry start
include 'win32a.inc'
section '.code' code readable executable
start:
;Открываем файл и убеждаемся в том, что мы его открыли
invoke CreateFile, _FileName, GENERIC_READ, 0, NULL, \
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL
cmp eax, INVALID_HANDLE_VALUE
je FileNotOpen
mov [_hFile], eax

 ; Цикл чтения данных из файла побайтно
   xor ebx, ebx
Lo:
cmp ebx,12
je Le
;Перемещаем указатель файла
invoke SetFilePointer, eax, ebx, _r, FILE_BEGIN
;Читаем файл
invoke ReadFile, [_hFile], _Buffer, 1, _r, NULL
;Выводим прочитанное пользователю
invoke MessageBox, HWND_DESKTOP, _Buffer, _Probel, MB_OK
add ebx,1
jmp Lo
Le:

;Закрываем файл
invoke CloseHandle, [_hFile]
mov [_hFile], NULL
jmp Exit
FileNotOpen:
invoke MessageBox,HWND_DESKTOP, _FileErrorOpen, NULL, MB_ICONERROR
Exit:
invoke ExitProcess, 0
section '.data' data readable
_FileName du 'C:\1.txt', 0
_FileErrorOpen du 'File opening failt', 0
_Probel du ' ', 0
LL dd 0
section '.rdata' data readable writeable
_hFile dd NULL
_Buffer rb 22
_r dd 00
section '.idata' data import readable writeable
library kernel, 'kernel32.dll',\
user , 'user32.dll'
import kernel,\
CreateFile , 'CreateFileW',\
SetFilePointer, 'SetFilePointer',\
ReadFile , 'ReadFile',\
CloseHandle , 'CloseHandle',\
ExitProcess , 'ExitProcess'
import user,\
MessageBox, 'MessageBoxA'


Автор: ФедосеевПавел 17.4.2014, 20:33
Moky, в данном примере файл считывается полностью в буфер и средствами ОС выводится на экран. При этом в буфере будет 12 байт. Что за байты? Ну можно посмотреть в программе просмотровщике выбрав режим hex (шестнадцатеричный) - как у меня на картинке.
user posted image
Если перед тобой стоит задача считать файл и вывести на экран не две строки, а их hex представления, то нужно будет "брать" из буфера по одному элементу (по байту), переводить в hex, сохранять в каком-то другом массиве, а потом выводить на экран этот полученный массив. Кажется, преобразование числа в строку - wprint или sprint - не помню. Посмотри в учебниках и по форуму.

Автор: tzirechnoy 17.4.2014, 21:41
Цитата
После первой строки скрыто два технических байта. Это возврат каретки и прогон листа. Если Вы воспользуетись  функцией ReadFile вы их не увидите


Если я воспользуюсь -- то я увижу.

PS Правильный вопрос, разумеется -- как показать коды ASCII-символов в функцыи MessageBox или её аналоге.
PPS Кстати, зачем Вы полезли в ассэмблер IA32/Windows? Есть замечательный Си с кучей книжэк для начинающих, бывают хорого написанные введения в программирование с условными ассэмблерами (вроде MMIX), спецыально разработанными для обучения и со спецыально подобными примерами -- зачем использовать трудный и неприспособленный IA32/Windows ассэмблер без вводной литературы?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)