我使用函数readfile()从预取文件中获取一些字节
BYTE ReadBuffer[24];
for(i=0; i < 24; (i++))
{
printf("%02X", *(ReadBuffer+i));
}
如果我使用%02X,我得到的结果与我的十六进制编辑器相同:
43 00 4F 00 4E 00 48 00 4F 00 53 00 54 00 2E 00 45 00 58 00 45 00 00 00
如果我使用%C:
C O N H O S T . E X E
它似乎是UTF-16LE,而且 我希望结果CONHOST.exe(没有空间...)仅使用WINAPI
我尝试使用WideCharToMultiByte,但它无法正常工作..
CHAR AnsiPath[MAX_PATH]
WideCharToMultiByte(CP_ACP, 0, (PWCHAR)Buffer, -1, AnsiPath, sizeof(AnsiPath), NULL, NULL)
有人可以解释我失败的地方吗?感谢
这里是完整的代码
int main(void)
{
HANDLE hFile;
DWORD dwBytesRead = 0;
BYTE ReadBuffer[10266];
DWORD nNumberOfBytesToRead = 10266;
LPCWSTR fname = L"C:\\Windows\\Prefetch\\CONHOST.EXE-3218E401.pf";
hFile = CreateFile(fname,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if (!ReadFile(hFile, ReadBuffer, nNumberOfBytesToRead, &dwBytesRead, NULL))
{
printf("Terminal failure: Unable to read from file.\n GetLastError=%08x\n", GetLastError());
CloseHandle(hFile);
}
printf("Data read from %s (%d bytes): \n", fname, dwBytesRead);
wprintf(L"%ld\n", ReadBuffer);
int i;
for(i=16; i < 40; i++)
{
printf("%C ", *(ReadBuffer+i));
}
char AnsiPath[MAX_PATH];
int result = WideCharToMultiByte(CP_UTF8, 0, (PWCHAR)ReadBuffer, -1, AnsiPath, 0,0,0);
printf("\nResult WideCharToMultiByte : %d\n", result);
printf("\nString : %s \n",AnsiPath);
CloseHandle(hFile);
system("pause");
return 0;
}
结果:
Data read from C (9068 bytes):
3199640
C O N H O S T . E X E
Result WideCharToMultiByte : 2
String : ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠(
Appuyez sur une touche pour continuer...
答案 0 :(得分:0)
关于您发布的新代码:
看起来您的字符串从ReadBuffer
的第16个字节开始,因此您需要使用ReadBuffer+16
或其他任何内容进行转换。
您忘记了sizeof(AnsiPath)
,就像您刚刚在上面发布的行一样。