これは本当にばかげた質問のように聞こえますが、単純な 16 進エディタを作成しようとしていて、ファイルからバイトを読み取ることができません。readfile api を使用して 8kb のバッファーを読み取り、次に 8kb を 16 進数に変換しようとしましたが、逆順で 4 バイトしか返されなかったり、0 になったりすることがあります。何が間違っているのかわかりません。どうすれば、16 進表現で完全な 8kb が得られる場所に到達できますか。ファイル全体を16進数に変換するより良い方法がある場合は、お知らせください。ファイル全体を読み取り、16 進数表現で画面に表示する最速の方法を探しています。ありがとう
FASM 構文ですが、簡単に C++ にすることもできます
invoke ReadFile, [hFile],filebuffer,8192, BytesWritten, 0
cinvoke wsprintfA,buffer1,"%X",[filebuffer]
invoke MessageBoxA,NULL,buffer1,title,MB_ICONINFORMATION+MB_OK
すべてのデータは dd ですか?
更新 このように見えるmasm構文アセンブリを見つけたので、2番目の回答を回答としてマークしましたが、それは非常に高速でしたが、先に進んでCryptBinaryToString api http://msdn.microsoft.com/en-us/libraryを使用しました/windows/デスクトップ/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