我正在寻找一种将 ANSI 字符串转换为宽字符串的方法,我需要在 CUDA CPU 代码中执行此操作,因此我不能使用像 MultiByteToWideChar 这样的系统 API。我用谷歌搜索了很多,但没有发现从头开始实施这个。
我下载了 reactos 的源代码,并尝试阅读 MultiByteToWideChar 的详细信息。它似乎比我想象的要复杂。
编辑:字符代码不限于0~127,可以是各种语言。但是 utf-8 无关紧要,它不会是 utf-8 格式。
有什么建议吗?
我正在寻找一种将 ANSI 字符串转换为宽字符串的方法,我需要在 CUDA CPU 代码中执行此操作,因此我不能使用像 MultiByteToWideChar 这样的系统 API。我用谷歌搜索了很多,但没有发现从头开始实施这个。
我下载了 reactos 的源代码,并尝试阅读 MultiByteToWideChar 的详细信息。它似乎比我想象的要复杂。
编辑:字符代码不限于0~127,可以是各种语言。但是 utf-8 无关紧要,它不会是 utf-8 格式。
有什么建议吗?
这取决于您用于字符串的编码。如果您使用的是普通的 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 等),那么您将需要更复杂的东西,例如编码转换函数,具体取决于您的输入/输出缓冲区文本编码。