【问题标题】:ansi string to wide string without system api [closed]没有系统api的ansi字符串到宽字符串[关闭]
【发布时间】:2016-03-29 07:57:58
【问题描述】:

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

我下载了 reactos 的源代码,并尝试阅读 MultiByteToWideChar 的详细信息。它似乎比我想象的要复杂。

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

有什么建议吗?

【问题讨论】:

  • 为什么不能使用“系统 API”?
  • 代码在 GPU 端运行,而不是在 CPU 端。 GPU 代码无法调用系统 API。
  • 那你为什么写“我需要在CUDA CPU代码中做这个”?
  • 我的要求很奇怪,但它跑题了。
  • 如果你正在编写 CPU 代码,无论你是否编译 CUDA 工具链,你都可以使用任何你想要的 CPU System API。如果您正在编写 GPU 代码,则不能。这不是题外话,它绝对是您问题的核心。是哪个?

标签: c cuda widestring


【解决方案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 等),那么您将需要更复杂的东西,例如编码转换函数,具体取决于您的输入/输出缓冲区文本编码。

【讨论】:

  • 谢谢,不过忘了说字符码不限于0~127,可以是各种语言。但 utf-8 无关紧要,它不会是 utf-8 格式。
  • 您应该澄清问题中使用的编码。如果你连源编码和目标编码都不知道,那也没有办法解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 2012-10-09
  • 2022-01-24
  • 1970-01-01
  • 2014-07-19
  • 2012-11-04
  • 2016-07-14
相关资源
最近更新 更多