有人可以帮我转换CString为const字节指针。我尝试下面的代码,但它不起作用。我的程序使用Unicode设置。
Cstring hello = "MyApp";
const BYTE* pData = (const BYTE*)(LPCTSTR)hello;
感谢。
答案 0 :(得分:0)
答案 1 :(得分:0)
来自How to convert CString to BYTE pointer:
将其解释为ascii string:
CStringA asciiString( hello );
const BYTE* lpData = (const BYTE*)(LPCSTR)asciiString;
或转换为代表本地代码页中字符串的字节:
CT2CA buf( hello );
const BYTE* lpData = (const BYTE*)buf;
答案 2 :(得分:0)
对于初学者,您需要了解您是否使用unicode。默认情况下,Visual Studio喜欢制作应用程序,因此他们使用的是Unicode。如果你想要的是ANSI(每个字母只使用1个字节),你需要将它从Unicode转换为ANSI。这将为您提供对象的BYTE *。这是一种方法:
CString hello;
hello=L"MyApp"; // Unicode string
int iChars = WideCharToMultiByte( CP_UTF8,0,(LPCWSTR) hello,-1,NULL,0,NULL,NULL); // First we need to get the number of characters in the Unicode string
if (iChars == 0)
return 0; // There are no characters here.
BYTE* lpBuff = new BYTE[iChars]; // alocate the buffer with the number of characters found
WideCharToMultiByte(CP_UTF8,0,(LPCWSTR) hello,-1,(LPSTR) lpBuff,iChars-1, NULL, NULL); // And convert the Unicode to ANSI, then put the result in our buffer.
//如果你想让它成为一个常量字节指针,只需添加以下行:
const BYTE* cbOut = lpBuff;
现在,如果您想要的只是本机地访问CString,那么只需将其转换为:
const TCHAR* MyString = (LPCTSTR) hello;