如何VC++ editcontrol中输入16进制数。?

解决方案 »

  1.   

    在edit的wm_char消息中过滤判断 nchar是否>0,<9 或者>a, <z, 或者>A , <Z, 是的话返回默认的onchar处理, 不是, 直接return.
      

  2.   

    LS说的很对,只是改成‘0’,‘9’,‘a’等,问这种问题的必定是初学者,你说0他就真和0比较了。
      

  3.   


    sorry, 应该 是 >= 和<=
      

  4.   

    函数我已经写出来了,不过。我想从edit control中读取数据(该数据以16进制表示)。
    然后在显示在另一个edit control窗口。
    比如。从edit1中输入。123(实际是0x123)
    在:   edit2中输出: 291(十进制数)
    我改怎么写。
    UINT32 StrToDec(unsigned char  *lpBuffer,int *Total)
    {
    int i;
    UINT32 IntBuffer;
    IntBuffer = 0;
    for(i = 0; i<(*Total); i++)
    {
    if(lpBuffer[i] < 0x3a)
    lpBuffer[i] -= 0x30;
    else if (lpBuffer[i] < 0x47)
    lpBuffer[i] -= 0x37;
    else 
    lpBuffer[i] -= 0x57;
    }
    for(i=0   ;   i   <  (*Total)   ;   i++)   
    {   
    IntBuffer +=  lpBuffer[i]*UINT32(pow(16.0,double(*Total-i-1)))   ;    
    }   
        
    return(IntBuffer); 
    }
      

  5.   

    有个api就直接能用strtol(str, NULL, 16); 
      

  6.   

    函数我已经写出来了,不过。我想从edit control中读取数据(该数据以16进制表示)。 
    然后在显示在另一个edit control窗口。 
    比如。从edit1中输入。123(实际是0x123) 
    在:  edit2中输出: 291(十进制数) 
    关键是这个功能怎么实现
    CString str;
    const char  *p;
    int n;
    CString strID ;
    n = 8;
    UINT32  uVal;
    uVal = 0;
    GetDlgItemText(IDC_EDIT1,str);
    p = str.GetBuffer(0);
    uVal = strtol(p,NULL,16);
    //uVal = StrToHex((unsigned char *)(LPCTSTR)str,&n);
    strID.Format(L"%lu",uVal); 
    SetDlgItemText(IDC_EDIT2, strID ) ; 
    出现错误:
    error C2440: '=' : cannot convert from 'wchar_t *' to 'const char *'
    这个类型怎么转换、