我可以知道如何执行以下转换吗?
// 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
它们太麻烦而无法使用。
答案 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"));