Unicode проект для CString в константный байт *? - PullRequest
1 голос
/ 12 декабря 2011

Может кто-нибудь помочь мне преобразовать CString в константный байтовый указатель.Я пытаюсь ниже код, но он не работает.Моя программа использует настройку Unicode.

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

спасибо.

Ответы [ 3 ]

0 голосов
/ 12 декабря 2011

С Как преобразовать CString в BYTE указатель :

  • интерпретировать его как строку ascii:

    CStringA asciiString( hello );
    const BYTE* lpData = (const BYTE*)(LPCSTR)asciiString;
    
  • или преобразовать в байты, представляющие строку в локальной кодовой странице:

    CT2CA buf( hello );
    const BYTE* lpData = (const BYTE*)buf;
    
0 голосов
/ 14 декабря 2011

Для начала вам нужно понять, используете ли вы юникод или нет.По умолчанию Visual Studio любит создавать приложения, чтобы они использовали Unicode.Если вам нужен ANSI (который использует только 1 байт на букву), вам нужно будет преобразовать его из Unicode в ANSI.Это даст вам БАЙТ * для объекта.Вот способ сделать это:

    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;
0 голосов
/ 12 декабря 2011

Попробуйте (PCWSTR)

документ в http://msdn.microsoft.com/en-us/library/8a994dfk(v=vs.80).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...