2013-11-24 73 views
-3

我想將wchar_t數組轉換爲int,我也在Google上搜索但沒有解決我的問題?從wchar_t轉換爲int

我的意思是,如果wchar_t的含有 「54」,我想轉換成int是54

GetWindowText(hWndEdit, wMinute, 10); 
iMinutes = (int)wMinute; 

不工作的權利。

如果有人能幫助我,我很高興。

+3

類型化並不神奇。它不會做你認爲它做的事。你正在尋找'std :: strtol()'等。但首先閱讀初學C++教程,這太基本了。哦,那不是'wchar_t',而是'wchar_t'的**數組**。不要誤導讀者! – 2013-11-24 08:39:47

回答

1

你的意思是要將wchar_t數組轉換爲int?

可以使用wcstol功能,或者讓自己明白:

在wchar_t的數組元素的每個爲2個字節。 如果wchar_t的一個[] = L 「45」,的存儲器是:

34 00 35 00 00 00 

34是ASCII 「4」 十六進制值,圖35是ASCII 「5」

如果轉換六值直接像這樣:

int i = (int)a[0]; 

我將包含52,爲什麼?因爲,現在我包含值0x34,它將在十進制中爲52。

好吧,現在,如何讓i = 45如你所願?

這是我簡單的函數來將wchar_t轉換爲像你所需要的int。這只是我的想法: 首先,您需要從[0]中獲得值4,從[1]中獲得5。你可以通過減去0x34到0x30,或者(減去52到48)來獲得,與其他元素一樣。然後,將每個結果與其係數相乘,例如:4 * 10和5 * 1(請參閱下文了解如何獲取係數)。

int miniPow(int a, int b) // power with small number - just demo 
{ 
    int r = 1; 
    for (int i = 0; i < b; i++) 
    { 
     r *= a; 
    } 
    return r; 
} 
int WideToInt(wchar_t a[]) 
{ 
    int i = 0; 
    int len = wcslen(a); 
    int coefficient = 0; 
    int RawNumber = 0; 
    int Number = 0; 

    for (int k = 0; k < len; k++) 
    { 
     coefficient = miniPow(10, len - 1 - k); 
     RawNumber = (int)a[k]; 
     Number = RawNumber - 48; 
     i += coefficient * Number; 
    } 
    return i; 
} 
2

你想要的功能是wcstol。像這樣

GetWindowText(hWndEdit, wMinute, 10); 
iMinutes = wcstol(wMinute, 0, 10); 

但我同意H2C03這是基本的東西。你真的應該學習如何爲自己找到這種信息。

這段代碼沒有錯誤檢查,也許你可以測試自己,並找出如何檢查轉換是否成功。