[英]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 輸出它(看看它是否顯示它應該讀取的字符串)。 但是,這會返回我的中文字符(而原始字符串應該是這樣的:
"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()
函數中的內容之外的所有內容都不是由我編寫的,而是由更有經驗的人編寫的。 該代碼應該沒問題,我確信它正在從頁面讀取數據,可能只是我在某處搞砸了轉換。
當您在需要寬 UTF-16 Unicode 字符串的地方使用窄字符串 (char*) 時,它往往看起來像中文。
您不能只是強制轉換字符串以更改其類型,您需要調用MultiByteToWideChar
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.