Это кажется довольно интересным вопросом для софтбола, но мне всегда трудно найти эту функцию, потому что, похоже, существует очень много вариантов относительно ссылок на char и tchar.
Каков самый простой способ преобразовать char [] в / из tchar [] в C / C ++ (ms)?
Ответы (8)
MultiByteToWideChar, но также см. "Несколько ошибок MultiByteToWideChar".
Самый простой способ - использовать макросы преобразования:
- CW2A
- CA2W
- и т.д...
TCHAR - это специфичный для Microsoft typedef для char или wchar_t (широкий символ).
Преобразование в char зависит от того, что это на самом деле. Если TCHAR на самом деле является char, вы можете выполнить простое приведение, но если это действительно wchar_t, вам понадобится процедура для преобразования между наборами символов. См. Функцию MultiByteToWideChar ()
В этом посте также есть несколько ответов, особенно если вы ищете кроссплатформенное решение:
Преобразование UTF8 в / из широких символов в STL
Хотя в этой конкретной ситуации я думаю, что TChar является широким символом, мне нужно будет выполнить преобразование, только если это не так. что я должен как-то проверить.
if (sizeof(TCHAR) != sizeof(wchar_t))
{ .... }
Самое интересное в том, что оба размера равных являются константами, что означает, что компилятор будет обрабатывать (и удалять) if (), и, если они равны, удаляет все внутри фигурных скобок.
Вот код CPP, который дублирует _TCHAR * argv [] в char * argn [].
Если вы адаптируете старый код для Windows, простое использование, указанное в коде, является необязательным.
Вы можете поставить условие в свой код
ifdef _UNICODE
{// ДЕЛАТЬ, КАК TCHAR ЕСТЬ ШИРОКИЙ СИМВОЛ} ИНАЧЕ {// НРАВИТСЯ, ЧТО TCHAR ЕСТЬ СИМВОЛ}
Я понимаю, что это старая ветка, но она не дала мне "правильный" ответ, поэтому добавляю ее сейчас.
Сейчас это делается с помощью макроса TEXT. Пример для FindFirstFile на msdn указывает на это. http://msdn.microsoft.com/en-us/library/windows/desktop/aa364418%28v=vs.85%29.aspx.