Char转换为int?

时间:2012-07-22 07:32:50

标签: c++ winapi

我试图从3个编辑框中获取rgb值,以便我可以在运行时更改窗口的颜色。以下代码没有给出我需要的数值。

        const int bufferSize = 1024;
        char fade1Buffer[bufferSize] = "";
        char fade2Buffer[bufferSize] = "";
        char fade3Buffer[bufferSize] = "";

        HWND Editbox1 = GetDlgItem(hWnd,IDC_MAINFADE1_EDIT); 
        SendMessage(Editbox1, WM_GETTEXT, (WPARAM)bufferSize, (LPARAM)fade1Buffer);
        HWND Editbox2 = GetDlgItem(hWnd,IDC_MAINFADE2_EDIT);
        SendMessage(Editbox2, WM_GETTEXT, (WPARAM)bufferSize, (LPARAM)fade2Buffer); 
        HWND Editbox3 = GetDlgItem(hWnd,IDC_MAINFADE3_EDIT);
        SendMessage(Editbox3, WM_GETTEXT, (WPARAM)bufferSize, (LPARAM)fade3Buffer);

        //fill our main window background
        FadeVert(hWnd, RGB(fade1Buffer, fade2Buffer,fade3Buffer), RGB(255, 255, 255), (int) Client_Rect.top, 
            (int) Client_Rect.left, (int) Client_Rect.right, (int) Client_Rect.bottom);

2 个答案:

答案 0 :(得分:3)

atoi()函数将char *转换为int。它位于<cstdlib>

之下
int atoi ( const char * str );

在这种情况下,

int i = atoi(fade1Buffer);

另见strtol()为@Keith Thompson和@Chris提到的。它使用起来有点困难,但它可以更好地处理错误。

   char * pEnd;
   long int i = strtol(fade1Buffer,&pEnd, 10);//10 is the base (decimal in this case)
   //pEnd == fade1Buffer if there is an error.

如果将其转换为C ++样式的std :: string,您也可以使用其他几个函数

#include <string>
std::string str(fade1Buffer);
int i = stoi(test);

参考:http://en.cppreference.com/w/cpp/string/basic_string/stol

答案 1 :(得分:3)

在Win32中有一个名为GetDlgItemInt的函数。请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms645485%28v=vs.85%29.aspx

这会减少1/3的代码行数以及将字符串转换为数字的所有麻烦。此外,你应该小心WM_GETTEXT的LPARAM。如果你定义了UNICODE,那么参数应该是wchar_t *而ANSI版本需要char *。