2014-05-23 169 views
0

如何將LPBYTE轉換爲char *或字符串? 具體而言,我打電話給EnumPrinterDataEx(),並從中取出pData,並且想要將其轉換。當我嘗試使用wcstombs()進行轉換時,它只會從pData中提供第一個字符。但我想知道轉換如何在一般情況下完成。如何將LPBYTE轉換爲C++中的char */string?

感謝

編輯: 得到的pData後,我做了LPWSTR的新變量,然後使用wcstombs轉換成一個char *這一點,而這一切運作良好。謝謝!

+0

嗯,這取決於數據的編碼!你將不得不做一些字符串嗅探來猜測它是UTF-8還是UTF-16或更深奧的東西...... – Cameron

回答

0

如果pData指向比這將是ANSI或Unicode空終止字符串(取決於EnumPrinterDataEx功能版本)的字符串 - 這樣你就可以簡單地將它轉換:

(char*)pData; 
(LPTSTR)pData; 
+0

感謝您的回覆。我試過兩種方式,但 (char *)只給出第一個字符。 (LPTSTR)給出了一些垃圾值,或者可能不是垃圾,但是我不知道它是什麼。 –

+0

你確定pData指向字符串嗎?你可以查看pData指向的內存嗎? (char *)pData [0],(char *)pData [1]的值是什麼...嘗試(wchar_t *)pData。 – VitaliyG

+0

它崩潰了(char *)pData [0],(char *)pData [2] .. 和(wchar_t *)pData返回一些垃圾值。 當我做wprintf()時,pData的實際值的形式是「AB1CD-E2FGH」 –

0

看來,您的字符串不是多字節,所以你有一個很寬的字符串。例如,使用wide版本(wcslen),而不是使用通用功能對其進行操作。

如果需要轉換爲char*,然後用wcstombs,像這樣:

#include <cstdlib> 

size_t len = wcslen(input) * 2 + 1; 
char * target = new char[len]; 
memset(target, 0, len); 
if (wcstombs(target, input, len) == len) target[len - 1] = '\0'; 
相關問題