今天发现电脑中的破解计算器似乎被病毒感染了,启动不了,于是乎,就有了今天的这篇笔记吧。。。
说动手就马上动手写一个功能和它相同的计算器,方便以后的使用,就不会在去求助于别人的程序了。。。
说道这里,我发现,其实计算器的实现,其实还是字符串与个进制的转换问题。。。
因为,只要你从文本框获取数据或者是写入数据,不可避免的都要使用字符串的操作。。
到底我们应该怎么样去做呢?
还是首先来看看我的程序的主界面吧。。。
怎么样,功能还是比较完善的吧。。。
在这里边呢,我还加入了获取最大公约数 GFC和 最小公倍数 LCM 的功能。。。
首先,我们当然必须从文本框中获取内容咯,
GetDlgItem(EDIT_BINARY)->GetWindowText(m_strBinary);经典的获取文本字符串的函数
得到字符串后,我们都想要处理它了。。。
先看这个函数吧:
就是可以将字符串转换成 2, 8 , 16 的数据。。。
Convert strings to a long-integer value.
long strtol( const char *nptr, char **endptr, int base ); long wcstol( const wchar_t *nptr, wchar_t **endptr, int base );
Parameters
- nptr
- Null-terminated string to convert. 存储转换后的数据,方便以后的处理 endptr
- Pointer to character that stops scan. 指向要转化的字符的末尾。。。想到与哨兵吧,把它设为NULL 也是可以的 base
- Number base to use. 想要转化的进制。。2 ,8 ,16
最后,什么都准备好了,我们就能够对这些数据进行其他的操作了。。。
哈哈
1:写入文本框:
wsprintf(m_szDec, "%ld", m_lDec); 将数据格式化成字符串的操作,不然是写不到文本框的。。。
::SetDlgItemText(this->m_hWnd, EDIT_DEC_2, m_szDec); 写到指定的位置
2:对话框输出:
wsprintf(m_szDec, "%d", m_lGCF); 使用的方法大同小异。。。
MessageBox(m_szDec, "Result", NULL);
最后,说一下 UpdateData();
它默认参数是 TRUE , 也就是将控件上的数据赋给 相应的变量,
false ,将相应变量的值 赋给 控件
这就是我写的进制转换工具的心得体会吧。。。