Я знаю, что это звучит как очень глупый вопрос, но я пытаюсь создать простой шестнадцатеричный редактор и не могу прочитать байты из файла. Я использую readfile api для чтения буфера размером 8 КБ, а затем я собирался преобразовать 8 КБ в шестнадцатеричный, но иногда это дает мне только 4 байта в обратном порядке, а иногда и 0. Я не уверен, что делаю неправильно. как я могу получить его туда, где он даст мне полные 8 КБ в шестнадцатеричном представлении. Если это лучший способ преобразовать весь файл в шестнадцатеричный, сообщите мне. Я просто ищу самый быстрый способ прочитать весь файл и отобразить его на экране в шестнадцатеричном представлении. спасибо
Синтаксис FASM, но вполне может быть и C++
invoke ReadFile, [hFile],filebuffer,8192, BytesWritten, 0
cinvoke wsprintfA,buffer1,"%X",[filebuffer]
invoke MessageBoxA,NULL,buffer1,title,MB_ICONINFORMATION+MB_OK
все данные дд?
Обновление Я пометил второй ответ как ответ, потому что нашел сборку синтаксиса masm, которая выглядела так, и это было очень быстро, но я пошел дальше и выбрал CryptBinaryToString api http://msdn.microsoft.com/en-us/library/windows/desktop/aa379887
вот ассемблерный код синтаксиса fasm, но опять же легко может стать c++
invoke ReadFile, [hFile],filebuffer,500, BytesWritten, 0
push dwBuffLen
push pszHexBuffer
push 0x0000000b ; CRYPT_STRING_HEXASCIIADDR
push 500
push filebuffer
call [CryptBinaryToStringA]
;pszHexBuffer contains the data
data sections
filebuffer rb 500
BUF_LEN = 4000
pszHexBuffer db BUF_LEN dup(0) ; will contain converted bytes in hex. Twice the size of the original buffer at least (Read documentation about the last _In_Out parameter)
dwBuffLen dd BUF_LEN
printf
и сбросить кусочки с помощью таблицы поиска. Это, вероятно, было бы ближе к тому, что вы хотите в любом случае. Для этого потребуется таблица из 16 символов (символы с'0'
по'F'
) и итеративный дамп, разбивающий каждый октет на два 4-битных полубайта, а затем используя каждый полубайт в качестве индекса в таблице, чтобы узнать, какой символ выгружать. Во всяком случае, так я поступал в прошлом. Не нужно использовать кувалду, какprintf
, чтобы прихлопнуть муху (хотя это, очевидно, проще реализовать). Обратите внимание, что предполагается, что 8-битный типchar
работает правильно. - person WhozCraig   schedule 25.05.2014