gpt4 book ai didi

c++ - 在 C++ 或程序集 (FASM) 中将原始字节转换为十六进制

转载 作者:行者123 更新时间:2023-11-28 06:51:41 25 4
gpt4 key购买 nike

我知道这听起来像是一个非常愚蠢的问题,但我正在尝试构建一个简单的十六进制编辑器,但我无法从文件中读取字节。我使用 readfile api 读取 8kb 缓冲区,然后我打算将 8kb 转换为十六进制,但它有时只给我 4 个字节的倒序或有时 0 我不确定我做错了什么。我怎样才能得到它给我完整的 8kb 十六进制表示的地方。如果他们是将整个文件转换为十六进制的更好方法,请告诉我。我只是在寻找读取整个文件并以十六进制表示形式将其显示在屏幕上的最快方法。谢谢

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 语法程序集看起来像这样,而且速度非常快,但我继续使用 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

最佳答案

sprintf("%X") 只会为您转换一个整数,甚至会根据小端(因此反转)并且没有前导零(因此有时更短)来完成输出)。您将需要一个循环并使用 %02x 格式打印每个字节。

关于c++ - 在 C++ 或程序集 (FASM) 中将原始字节转换为十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23849580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com