2010-06-06 36 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()等轉換函數。