【问题标题】:convert wchar_t array into int array in C在 C 中将 wchar_t 数组转换为 int 数组
【发布时间】:2021-07-31 08:10:12
【问题描述】:

我正在尝试将 wchar_t 数组转换为一个 int 数组,其中包含 C 中每个 wchar_t 元素的编码。我知道我可以通过像下面的代码这样的循环来做到这一点,有没有其他方法不使用循环哪些可以大大提高性能?

 for(int i=0; i< filesize; i++){
    t[i] = (int)p[i];   //t is an int array, p is a wchar_t array
}

【问题讨论】:

  • 我猜你可以使用 memcpy
  • 如果 int 和 wchar_t 兼容,您可以使用 memcpy,但在这种情况下,代码可能会被编译为 memcpy。所以可能没有什么可以做的,尽管如果可能的话我会考虑直接使用 wchar_t 数组。
  • @lulle 怎么样?你能提供一个示例代码吗?
  • @PaulHankin 你能提供一个使用 memcpy 的示例代码吗?是的,我想直接在不支持的 cuda 中使用 wchar_t 数组,所以我试图先在设备中将其转换为 int 数组,然后将其转换回主机中

标签: arrays c wchar-t


【解决方案1】:

假设wchar_tint 具有相同的大小,memcpy 可能就是您想要的。

#include <string.h>
#include <wchar.h>

int main(void)
{
    _Static_assert(sizeof (int) == sizeof (wchar_t), "This won't work");
    wchar_t warr[3] = {L'a', L'b', L'c'};
    int iarr[3] = {0};
    memcpy(iarr, warr, sizeof warr);
    // iarr now holds the same contents as warr
}

【讨论】:

  • 感谢您的回答,但我在测试您的代码时收到此错误,我该怎么办?:test.cu(7): error: identifier "_Static_assert" is undefined
  • @wevrqwevrq2 似乎您正在将代码编译为 C11 之前的版本。添加编译器选项以选择 C11 或更高版本(例如,在 GCC 上,这是 -std=c11)或包含 &lt;assert.h&gt; 并将该行替换为 assert(sizeof (int) == sizeof (wchar_t));Example.
【解决方案2】:

没有。在这种情况下,没有真正的选择(至少如果您考虑到可移植性)。否则,mediocrevegetable1 是一个可能的解决方案。

【讨论】:

    猜你喜欢
    • 2012-10-12
    • 2018-10-09
    • 1970-01-01
    • 2014-03-02
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    相关资源
    最近更新 更多