将CString转换为const byte*的Unicode项目

Unicode project for CString to const byte*?

本文关键字:Unicode 项目 byte const CString 转换      更新时间:2023-10-16

有人可以帮助我转换CString到const字节指针。我尝试下面的代码,但它不工作。我的程序使用Unicode设置。

Cstring hello = "MyApp";
const BYTE* pData = (const BYTE*)(LPCTSTR)hello;

谢谢。

从如何将CString转换为BYTE指针:

  • 将其解释为ascii字符串:

    CStringA asciiString( hello );
    const BYTE* lpData = (const BYTE*)(LPCSTR)asciiString;
    
  • 转换为表示本地代码页中的字符串的字节:

    CT2CA buf( hello );
    const BYTE* lpData = (const BYTE*)buf;
    

Try (PCWSTR)

文档位于http://msdn.microsoft.com/en-us/library/8a994dfk(v=vs.80).aspx

对于初学者,您需要了解是否使用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;