从wchar_t转换为int

时间:2013-11-24 08:38:02

标签: c++

我想将wchar_t数组转换为int,我也在Google上搜索但没有解决我的问题???

我的意思是,如果wchar_t包含“54”,我想转换成int是54。

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

不能正常工作。

如果有人能帮助我,我很高兴。

2 个答案:

答案 0 :(得分:2)

您想要的功能是wcstol。喜欢这个

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

但我同意H2C03这是基本的东西。你真的应该学习如何为自己找到这种信息。

此代码中没有错误检查,也许您可​​以测试自己并找出如何检查转换是否成功。

答案 1 :(得分:1)

你的意思是想将wchar_t数组转换为int?

您可以使用wcstol函数,或让自己理解:

wchar_t数组中的每个元素都是2个字节。 如果wchar_t a [] = L“45”,则a的记忆是:

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;
}