RogerQ 发表于 2008-5-26 20:59

转换(VC)

我想在一个编辑框里输入一个十进制数,然后在另一个编辑框里输出十六进制(大写的,如“XXH”),能提供一下代码吗?谢谢!

zaijzhgh 发表于 2008-5-26 22:51

代码而已嘛,简单……不过你看得懂才好:

//变换进制
void CcalculatorDlg::OnCheck_System_Radio(UINT Check)
{
m_Edit2.SetWindowTextW(L"");
try{
//设置进制的值
if(Check != precheck)//进制变换了,要改变编辑框的内容
{
   int base = 10;
   int prebase = 10;
   switch(Check)
   {
   case 1042:
    {
   base = 16;   
    }break;//十六进制
   case 1043:
    {
   base = 10;
    }break;//十进制
   case 1044:
    {
   base = 8;   
    }break;//八进制
   case 1045:
    {
   base = 2;
    }break;//二进制
   }
   switch(precheck)
   {
   case 1042:
    {
   prebase = 16;   
    }break;//十六进制
   case 1043:
    {
   prebase = 10;
    }break;//十进制
   case 1044:
    {
   prebase = 8;   
    }break;//八进制
   case 1045:
    {
   prebase = 2;
    }break;//二进制
   }
   CString str = L"0";
   GetDlgItem(IDC_EDIT1)->GetWindowText(str);//取得编辑框的内容
   if(str.IsEmpty())//当编辑框为空的时候会出现异常
   {
    str = "0";
   }
   String ^str1 = gcnew String(str);//从CString转换为string
   __int64 n = Convert::ToInt64(str1, prebase);//确定编辑框的进制,转换
   String ^str2 = Convert::ToString(Convert::ToInt64(str1, prebase),base);//转为当前进制
   CString str0(str2);
   GetDlgItem(IDC_EDIT1)->SetWindowTextW(str0);//重设编辑框的内容
   oper_str1 = str0;
   first = 1;
   oper_str2 = L"0";
   UpdateData(TRUE);//更新编辑框的内容
   delete str1;//防止内存泄漏
}
switch( Check )
{
case IDC_RADIO4:
   {
    Check_system = 16;
   }break;
case IDC_RADIO5:
   {
    Check_system = 10;
   }break;
case IDC_RADIO6:
   {
    Check_system = 8;
   }break;
case IDC_RADIO7:
   {
    Check_system = 2;
   }break;
}
HideShow(Check_system);//显示隐藏按钮
precheck = Check;//改变为当前的进制
}catch(Exception ^e)
{
System::String ^str("");
str = e->Message;
CString cs(str);
MessageBox(cs);
}
}



提示:用".NET“就很简单,用C语言函数也可以实现,不过我追求进度,就用了”.net“的函数……

RogerQ 发表于 2008-5-26 23:19

真的不太懂!! ?我的对话框只有两个编辑框和一个按扭,希望点击按扭输出结果,能直接用吗?

zaijzhgh 发表于 2008-5-27 07:58

当然不能直接用,这代码只是提供一个思路而已。你百度or google一下进制度转换内容了。没有汗水怎么有收获,当年(也就上学期)写这个计算器就花了2K++的代码量,还是bug多多 。

皇家救星 发表于 2008-5-27 11:22

CString firstedit;
GetDlgItemText(IDC_EDIT1, firstedit);
int n = atoi(firstedit);
CString secondedit;
secondedit.Format("%x", n);
SetDlgItemText(IDC_EDIT2, secondedit);

RogerQ 发表于 2008-5-27 11:50

楼上的很厉害哦, ,但是我想小数都可以转换,怎么改好呢?

RogerQ 发表于 2008-5-27 11:52

还有我想把“XXH”的H也显示出来?

zaijzhgh 发表于 2008-5-27 13:03

计算机组成原理or计算机基础文化不是有介绍怎么转换小数的吗?你可以把整数部分和小数分开转换(它们之间有“.”号分隔的),然后再组合。
页: [1]
查看完整版本: 转换(VC)