2014-05-23 129 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'; 
相关问题