2010-06-06 49 views
0

如何将一个INT类型的变量放入一个wchar数组?如何把INT /从一个WCHAR数组中取出/取出?

感谢

编辑:

很抱歉的短缺问题。是的,我们可以使用WCHAR *将INT转换为WCHAR数组,但是当我们检索返回结果(WCHAR []为INT)时,我意识到我们需要从WCHAR数组中读取2的大小,因为INT是4个BYTE相当于2个WCHAR。

WCHAR arData[20]; 
INT iVal = 0; 
wmemcpy((WCHAR*)&iVal, arData, (sizeof(INT))/2); 

这是从WCHAR阵列检索回INT值

回答

1

从技术上讲,由于严格的别名和对齐,你的做法是不安全的。最安全和最便携的方式是逐个读取字符并将它们与位移组合在一起。

虽然您的代码可以在Windows PC上工作,但不要期望它是可移植的或适用于所有编译器和编译器设置。

基本例如(可提高到关于整数的大小,字节顺序等更便携):

WCHAR arData[20]; 

... 
// Read little-endian 32-bit integer from two 16-bit chars: 
INT iVal = arData[0] | arData[1] << 16; 
+0

能否请您提供您的建议的例子吗? – nimo 2010-06-06 13:21:54

+0

@nimo,增加了一个例子。 – 2010-06-06 13:32:09

+0

感谢亚历克斯,感谢您能否为我提供解释如何获得此解决方案的解释。请尽可能提供资源参考。我非常想知道如何使用按位操作来处理数据类型转换。 – nimo 2010-06-06 14:00:12

1
WCHAR t[100]; 
int x = 3; 
*((int *)t) = x; 

,或者,如果你想要的文字最安全的办法:

假设你的应用程序是unicode的,使用wsprintf

WCHAR t[100]; 
int x = 3; 
wsprintf(t, "%d", &x); 
1

如果你想简单地分配一个int到一个wchar数组中,使用casting:

wchar wArray[N]; 
int num = xxx; 
wArray[0] = (wchar)num; 

如果要插入数字的字符串值,则需要使用itoa()等转换函数。