char数组到LPCTSTR

时间:2010-06-11 06:49:46

标签: c++

我可以知道如何执行以下转换吗?

// el.strCap is char[50]
// InsertItem is expecting TCHAR pointer (LPCTSTR)
// How I can perform conversion?
// I do not have access in both "list" and "el" source code
// Hence, there is no way for me to modify their signature.
list.InsertItem(i, el.strCap);

并且不,我不想使用

WideCharToMultiByte

它们太麻烦而无法使用。

3 个答案:

答案 0 :(得分:3)

如果您使用的是ATL,则可以使用其中包含的various macros and helper classes进行转换:

char *test = "Hello World";
CA2CT ct(test);
list.InsertItem(i, ct);

在我看来,尽管说WideCharToMultiByte太麻烦但有点不诚实。包含对WideCharToMultiByte的调用并使其返回std :: wstring或者您需要的任何内容都很容易。事实上,这基本上是CA2CT在幕后做的事情......

答案 1 :(得分:1)

如果您的字符串编码为ISO-8859-1,则很容易转换为UTF-16:

// Convert an ISO-8859-1 string to a UTF-16 string
wchar_t wstr[50];
for (int i = 0; i < 50; ++i)
{
    wstr[i] = el.strCap[i];
    if (!wstr[i])
        break;
}

但是如果您的数据是ISO-8859-1(或者是子集的ASCII)以外的任何其他数据,那么您将需要处理更复杂的转换。一旦你需要这样做,你会发现MultiByteToWideChar并不比较麻烦。

答案 2 :(得分:1)

您也可以使用CStringW,即list.InsertItem(i, CStringW("blah"));