Как мне преобразовать WCHAR * в обычную строку? - PullRequest
0 голосов
/ 18 ноября 2010

Итак, в Win32 API моя основная функция определена так:

wmain (int argc, WCHAR * argv [])

Я передаю некоторые аргументы и яХотелось бы выполнить регистр переключения, основываясь на значении аргумента, что-то вроде этого.

wmain(int argc, WCHAR* argv[])
{
    char* temp = argv[];
    switch (temp) {
    case "one": blah blah;
...
}

Конечно, temp = argv [] не работает, я ищу предложениепреобразовать это.Прямо сейчас у меня происходит что-то еще, и это ОЧЕНЬ неэффективно!

Причина, по которой мне нужно его преобразовать, заключается в том, что я не могу выполнить регистр переключения на WCHAR *.

Спасибо за поиск.

Ответы [ 4 ]

2 голосов
/ 18 ноября 2010

Вы также не можете выполнить переключение на символе *.(Но когда вам действительно нужно преобразовать WCHAR * в char *, используйте WideCharToMultiByte)

Вам необходимо использовать if / else if с lstrcmpi , CompareString или каким-либо другимФункция сравнения строк.

В качестве альтернативы используйте одну из библиотек анализатора параметров, например argtable или getopt

0 голосов
/ 19 ноября 2010

Вот небольшой пример, который я написал некоторое время назад.

Создайте новое консольное приложение win32 и выберите поддержку ATL. Добавьте это и скомпилируйте / запустите ...

#include "stdafx.h"
#include <iostream>

using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
// A _TCHAR is a typedef'd, depending on whether you've got a unicode or MBCS build

// ATL Conversion macros are documented here
// http://msdn.microsoft.com/en-us/library/87zae4a3(VS.80).aspx
// Declare USES_CONVERSION in your function before using the ATL conversion macros
// e.g. T2A(), A2T()    
USES_CONVERSION;

TCHAR* pwHelloWorld = _T("hello world!");
wcout << pwHelloWorld << endl;

// convert to char
char* pcHelloWorld = T2A(pwHelloWorld);
cout << pcHelloWorld << endl;


cin.get();

return 0;
}

Конечно, вы не можете включить строку, но это должно дать вам информацию, необходимую для чтения WCHAR в символ. Оттуда вы можете легко преобразовать в int .. Надеюсь, это поможет;)

0 голосов
/ 18 ноября 2010

Попробуйте преобразовать его из std :: wstring в std :: string, это просто, может быть, есть более короткий путь.

Преобразование WCHAR * в std :: wstring с использованием конструктора std :: wstring, а затемиспользуйте один из методов std :: wstring для преобразования в std :: String

0 голосов
/ 18 ноября 2010

Я не уверен, что это хорошая идея.WCHAR * может содержать символы Юникода, которые не могут быть отображены на символ * осмысленным образом.Если вы хотите игнорировать это, есть сообщение на форуме http://www.codeguru.com/forum/showthread.php?t=336106, в котором есть некоторые предложения по конвертации из WCHAR * в char *.

...