VS中检测用户输入十六进制是否合法.docxVIP

VS中检测用户输入十六进制是否合法.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VS中检测用户输入十六进制是否合法

用MFC制作一个十六进制字符串异或的工具,这篇文章就以这个工具为演示总结一下自己的学习心得。1 控制用户输入数据的长度在给用于用户输入十六进制字符串数据的Edit Control控件添加变量时,可以在“最大字符数”这个选项中填入一个整数,例如这个工具最大字节就限制在500内。这样就会生成如下代码,作用是在数据交互时自动截取前面500个字符。void CHexStrXorDlg::DoDataExchange(CDataExchange* pDX){ CDialogEx::DoDataExchange(pDX); //用于控件1和第一个十六进制字符串变量交互 DDX_Text(pDX, IDC_EDIT1, HexStr1); DDV_MaxChars(pDX, HexStr1, 500); //用于控件2和第二个十六进制字符串变量交互 DDX_Text(pDX, IDC_EDIT2, HexStr2); DDV_MaxChars(pDX, HexStr2, 500); //用于控件3和异或结果变量交互 DDX_Text(pDX, IDC_EDIT3, HexStr); DDV_MaxChars(pDX, HexStr, 500);}但是,这样只是截取用户输入的字符串前面的500字节,而不是提示用户输入的数据不合法。所以,改进的方法就是为控件1和控件2添加对应的EN_KILLFOCUS控件事件(OnEnKillfocusEdit1、OnEnKillfocusEdit2)。然后自己写了一个验证方法CheckInputHex,用于检查长度和字符串中是否都是十六进制字符,完整的实现代码如下://检查输入的十六进制字符串是否合法int CheckInputHex(CEdit* pEdit, CString HexInput){ //获取字符串的长度 int i, HexInputLen; HexInputLen = HexInput.GetLength(); //检查长度是否合适 if (HexInputLen 500) { //弹出一个错误框,提示用户输入的数据不合法 AfxMessageBox(_T(长度不能大于500!)); //重新将焦点聚集在这个数据不合法的控件框内 pEdit-SetFocus(); pEdit-SetSel(0, HexInputLen); return -1; } //检查是否是十六进制字符 for (i = 0; i HexInputLen; i++) { if (HexInput[i]0x30 || (HexInput[i]0x39 HexInput[i]0x41) || (HexInput[i]0x46 HexInput[i]0x61) || HexInput[i] 0x66) { AfxMessageBox(_T(请输入正确的十六进制字符串!)); pEdit-SetFocus(); pEdit-SetSel(0, HexInputLen); return -1; } } return 0;}void CHexStrXorDlg::OnEnKillfocusEdit1(){ // TODO: 在此添加控件通知处理程序代码 CEdit* pEdit; //获得第一个字符串控件 pEdit = (CEdit*)GetDlgItem(IDC_EDIT1); //获取Edit Control内的内容,即第一个十六进制字符串 pEdit-GetWindowText(HexStr1); //检查合法性 int iCheckData; iCheckData = CheckInputHex(pEdit, HexStr1); //出错则直接返回 if (iCheckData) return;}2 检测用户输入数据是否合法因为用户输入的数据并不一定是你设想的,可能还是“有害”的,所以在使用前必须予以检查。由于我的这个工具要求用户输入的必须是十六进制字符串,所以必须要检查每个字符是否合法。检查方法已经包含在上面CheckInputHex方法了,如果用户输入了非法字符,例如G、h等非十六进制字符,那么就会弹出错误框如下:3 统计用户输入字符串的长度如果用户输入了一个合法的字符串,然后离开了输入框,这时应该自动在输入框的右侧统计出用户输入的字符串的长度。方法依然是在控件对应的EN_KILLFOCUS事件处理方法OnEnKillfocusEdit1中实现:void CHexStrXorDlg::OnEnKillfocusEdit1(){ /** * 省略小节1中的OnEnKillfocusEdit1()已有的代码 * / //更新长度 CString UpdateHexStr1Len; UpdateHexStr

文档评论(0)

yaobanwd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档