Arrays 在C中将wchar_t数组转换为int数组

Arrays 在C中将wchar_t数组转换为int数组,arrays,c,wchar-t,Arrays,C,Wchar T,我正在尝试将一个wchar\u t数组转换为一个int数组,该数组包含C中每个wchar\u t元素的编码。我知道我可以通过下面的代码这样的循环来实现这一点,有没有其他不使用循环的方法可以大大提高性能 for(int i=0; i< filesize; i++){ t[i] = (int)p[i]; //t is an int array, p is a wchar_t array } for(int i=0;i

我正在尝试将一个wchar\u t数组转换为一个int数组,该数组包含C中每个wchar\u t元素的编码。我知道我可以通过下面的代码这样的循环来实现这一点,有没有其他不使用循环的方法可以大大提高性能

 for(int i=0; i< filesize; i++){
    t[i] = (int)p[i];   //t is an int array, p is a wchar_t array
}
for(int i=0;i
假设
wchar\u t
int
大小相同,
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
}
#包括
#包括
内部主(空)
{
_静态断言(sizeof(int)=sizeof(wchar\u t),“这不起作用”);
wchar_t warr[3]={L'a',L'b',L'c'};
int iarr[3]={0};
memcpy(iarr、warr、warr大小);
//iarr现在拥有与warr相同的内容
}

假设
wchar\u t
int
大小相同,
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
}
#包括
#包括
内部主(空)
{
_静态断言(sizeof(int)=sizeof(wchar\u t),“这不起作用”);
wchar_t warr[3]={L'a',L'b',L'c'};
int iarr[3]={0};
memcpy(iarr、warr、warr大小);
//iarr现在拥有与warr相同的内容
}

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

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

您可以使用memcpy我猜如果int和wchar\t兼容,您可以使用memcpy,但在这种情况下,代码可能会编译成memcpy。所以可能没有什么可以做的,虽然我会考虑如果可能的话直接使用W查尔格阵列。@ Lulle如何?你能提供一个示例代码吗?@PaulHankin你能用memcpy提供一个示例代码吗?是的,我想在cuda中直接使用不支持的wchar_____________________________________________________________。所以可能没有什么可以做的,虽然我会考虑如果可能的话直接使用W查尔格阵列。@ Lulle如何?你能提供一个示例代码吗?@PaulHankin你能用memcpy提供一个示例代码吗?是的,我想在cuda中直接使用不支持的wchar\u t数组,所以我尝试先在设备中将其转换为int数组,然后在主机中将其转换回感谢您的回答,但我在测试代码时遇到此错误,我应该怎么做?:test.cu(7):错误:标识符“\u Static\u assert”是undefined@wevrqwevrq2似乎您正在将代码编译为C11之前的版本。添加编译器选项以选择C11或更高版本(例如,在GCC上这是
-std=C11
)或包含
。感谢您的回答,但我在测试代码时遇到此错误,我应该怎么做?:test.cu(7):错误:标识符“\u Static\u assert”是undefined@wevrqwevrq2似乎您正在将代码编译为C11之前的版本。添加编译器选项以选择C11或更高版本(例如,在GCC上这是
-std=C11
),或包括