努力将 LPBYTE 转换为 char* 或 C 中的任何类似内容(中文输出?)
Struggling with conversion of an LPBYTE to char* or anything alike in C (Chinese output?)
我正在处理一个 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 输出它(以查看它是否显示它应该读取的字符串)。但是,这个returns我的汉字(而原来的字符串应该是这样的:
"TASKci=0C73CCFD206BBD011E7087CE0806E6F6E69630,job=dlex,ti=AD62A5950B76F3812C542C24040EACE9,pr=https,ur=//test.com/test.txt,cl=".
截图什么的returns我: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()
函数中的内容之外的所有内容都不是我编写的,而是由更有经验的人编写的。该代码应该没问题,我确定它正在从页面读取数据,可能只是我在某处搞砸了转换。
窄字符串 (char*) tends to look like Chinese 当您在需要宽 UTF-16 Unicode 字符串的地方使用它时。
你不能只转换字符串来改变它的类型,你需要调用 MultiByteToWideChar
.
我正在处理一个 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 输出它(以查看它是否显示它应该读取的字符串)。但是,这个returns我的汉字(而原来的字符串应该是这样的:
"TASKci=0C73CCFD206BBD011E7087CE0806E6F6E69630,job=dlex,ti=AD62A5950B76F3812C542C24040EACE9,pr=https,ur=//test.com/test.txt,cl=".
截图什么的returns我: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()
函数中的内容之外的所有内容都不是我编写的,而是由更有经验的人编写的。该代码应该没问题,我确定它正在从页面读取数据,可能只是我在某处搞砸了转换。
窄字符串 (char*) tends to look like Chinese 当您在需要宽 UTF-16 Unicode 字符串的地方使用它时。
你不能只转换字符串来改变它的类型,你需要调用 MultiByteToWideChar
.