我正在寻找一种将ANSI字符串转换为宽字符串的方法,我需要在CUDA CPU代码中执行此操作,因此我无法使用像MultiByteToWideChar这样的系统API。我google了很多,但没有发现从头开始实现这一点。
我下载了reactos的源代码,并尝试阅读MultiByteToWideChar的详细信息。这看起来比我想象的要复杂得多。
编辑: 字符代码不限于0~127,可以是各种语言。但utf-8无关紧要,它不会采用utf-8格式。
有什么建议吗?
答案 0 :(得分:1)
这取决于您为字符串使用的编码。如果您使用普通的US-ASCII字符串(即字符代码点0到127),您可以使用这样简单的东西(当然您可以/应该为NULL指针和缓冲区长度添加安全检查):
void charStrToWCharStr(wchar_t *dest, const char *src)
{
while (*src != '\0')
*dest++ = *src++;
}
这基本上等同于目标缓冲区是wchar_t数组的strcpy。所有src缓冲区字符都被复制到dest缓冲区,每个字符都会在此过程中转换为wchar_t。
如果您正在使用多字节编码(如UTF-8,UTF-16等),那么您需要更复杂的功能,例如编码转换功能,具体取决于您的输入/输出缓冲区文本编码。