-2

我有一个正在处理的 C 项目,但遇到了问题。该程序读取由 .php 页面回显的字符串。它使用此代码读取数据并将其指定给一个变量,该变量被发送到 Commands() 函数:

LPSTR szBuffer=(LPSTR)chunk+0x1000;
DWORD dwRead;

if (CWA(_HttpSendRequestA, wininet, hHttpRequest, szHeaders, lpstrlenA(szHeaders), szReq, lpstrlenA(szReq)) != 0)
    {
        CWA(_InternetReadFileA, wininet, hHttpRequest, szBuffer, 0x400, &dwRead);
        if (dwRead)
            Commands((LPBYTE)szBuffer, dwRead);
    }

如您所见,数据被发送到 Commands() 函数,该函数接收 LPBYTE szBuffer(在函数中命名为“command”)和 DWORD dwRead(在函数中命名为“size”)。

在 Commands() 函数中,它应该读取从 .php 页面读取的字符串。但是,由于数据似乎存储为 LPBYTE,因此我做了很多事情试图将其转换为 char*。然而,当我认为我终于得到它时,我尝试使用 MessageBox 输出它(查看它是否显示它应该读取的字符串)。但是,这会返回我中文字符(而原始字符串应该是这样的:

"TASKci=0C73CCFD206BBD011E7087CE0806E6F6E69630,job=dlex,ti=AD62A5950B76F3812C542C24040EACE9,pr=https,ur=//test.com/test.txt,cl="。

它返回给我的截图:http: //prntscr.com/h0p5iw

Commands() 中的代码看起来如何:

BOOL Commands(LPBYTE command, DWORD size) {

LPTSTR x = (LPTSTR)((char*)command);

{

        int msgboxID = MessageBox(
        NULL,
        x,
        (LPCWSTR)L"Woop",       
        MB_ICONWARNING | MB_CANCELTRYCONTINUE | MB_DEFBUTTON2 );

}


CWA(Sleep, kernel32, 100);

return 1; }

我是 C 的新手(我以前只用 C# 写过东西),所以如果我问任何愚蠢的问题,我很抱歉,我真的尽力了,但我自己似乎找不到任何解决方案。

另外,请记住,除了Commands()函数内部的内容之外的所有内容都不是由我编写的,而是由更有经验的人编写的。该代码应该没问题,我确信它正在从页面读取数据,可能只是我在某处搞砸了转换。

4

1 回答 1

3

当您在需要宽 UTF-16 Unicode 字符串的地方使用窄字符串 (char*)时,它往往看起来像中文。

您不能只转换字符串来更改其类型,您需要调用MultiByteToWideChar.

于 2017-10-23T00:39:18.170 回答