Какой самый простой способ преобразовать char [] в / из tchar [] в C / C ++ (мс)? - PullRequest
18 голосов
/ 02 октября 2008

Это кажется довольно софтбольным вопросом, но мне всегда трудно найти эту функцию, потому что, кажется, существует множество вариаций относительно ссылок на char и tchar.

Ответы [ 8 ]

10 голосов
/ 02 октября 2008

Самый простой способ - использовать макросы преобразования:

  • CW2A
  • CA2W
  • и т.д ...

1012 * MSDN *

7 голосов
/ 02 октября 2008
7 голосов
/ 02 октября 2008

TCHAR - это специфичная для Microsoft typedef для char или wchar_t (широкий символ).

Преобразование в символ зависит от того, какой из них это на самом деле. Если TCHAR на самом деле является char, то вы можете выполнить простое приведение, но если это действительно wchar_t, вам понадобится подпрограмма для преобразования между наборами символов. См. Функцию MultiByteToWideChar ()

3 голосов
/ 02 октября 2008

Хотя в этой конкретной ситуации я думаю, что TChar - широкий символ, мне нужно будет только выполнить преобразование, если это не так. который я должен как-то проверить.

if (sizeof(TCHAR) != sizeof(wchar_t))
{  .... }

Крутая вещь в том, что оба размера equals являются константами, что означает, что компилятор будет обрабатывать (и удалять) if (), а если они равны, удалять все внутри фигурных скобок

3 голосов
/ 02 октября 2008

В этом посте также есть несколько ответов, особенно если вы ищете кроссплатформенное решение:

UTF8 в / из широкого преобразования символов в STL

2 голосов
/ 27 октября 2010

Вот код CPP, который дублирует _TCHAR * argv [] до char * argn [].

http://www.wincli.com/?p=72

Если вы принимаете старый код в Windows, просто используйте упомянутое в коде опционально.

1 голос
/ 31 мая 2016

Вы можете поставить условие в своем коде

ifdef _UNICODE

{// НРАВИТСЯ ЧАР-ЧАР-ЧАР} ELSE {// НРАВИТСЯ ЧАР-ЧАР-ЧАР}

0 голосов
/ 26 января 2012

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

То, как это теперь делается, заключается в использовании макроса TEXT. Пример для FindFirstFile в msdn указывает на это. http://msdn.microsoft.com/en-us/library/windows/desktop/aa364418%28v=vs.85%29.aspx

...