ansi字符串到没有系统api的宽字符串

时间:2016-03-29 07:57:58

标签: c cuda widestring

我正在寻找一种将ANSI字符串转换为宽字符串的方法,我需要在CUDA CPU代码中执行此操作,因此我无法使用像MultiByteToWideChar这样的系统API。我google了很多,但没有发现从头开始实现这一点。

我下载了reactos的源代码,并尝试阅读MultiByteToWideChar的详细信息。这看起来比我想象的要复杂得多。

编辑: 字符代码不限于0~127,可以是各种语言。但utf-8无关紧要,它不会采用utf-8格式。

有什么建议吗?

1 个答案:

答案 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等),那么您需要更复杂的功能,例如编码转换功能,具体取决于您的输入/输出缓冲区文本编码。