VS中检测用户输入十六进制是否合法
visualstudio调试方法

visualstudio调试⽅法最近碰巧读了Ivan Shcherbakov写的⼀篇⽂章,《》。
这篇⽂章只介绍了⼀些有关Visual Studio的基本调试技巧,但是还有其他⼀些同样有⽤的技巧。
我整理了⼀些Visual Studio(⾄少在VS 2008下)原⽣开发的调试技巧。
(如果你是⼯作在托管代码下,调试器会有更多的特性,在CodeProject中有介绍它们的⽂章),下⾯是我的整理的⼀些技巧:1. 异常中断 | Break on Exception2. Watch窗⼝中的伪变量 | Pseudo-variables in Watch Windows3. 符号越界后查看堆对象 |4. 查看数组的值5. 避免进⼊不必要的函数6. 从代码启动调试器 | Launch the debugger from code7. 在Output窗⼝打印8. 隔离内存泄漏9. 调试发⾏版 | Debug the Release Build10. 远程调试11. 数据断点12. 线程重命名13. 给指定线程设置断点14.(粗略)估算执⾏时间15. 数字格式化16. (内存)数据格式化17.系统DLL中断18.加载符号表19. 监测MFC中的内存泄漏20. 调试ATL技巧1:异常中断在处理被调⽤之前,异常发⽣时可以启动调试器进⾏中断,可以让你在异常发⽣后⽴即调试程序。
操作调⽤栈便于你去查找异常发⽣的根本原因。
Vistual Studio允许你去指定想要中断的异常类型或者特殊异常。
选择菜单Debug>Exceptions弹出对话框,你可以指定原⽣的(或者托管的)异常,除了调试器⾃带的⼀些默认异常,你还可以添加⾃⼰的⾃定义异常。
下⾯是⼀个std::exception 异常抛出时调试器中断的例⼦。
更多阅读:1.2.技巧2:Watch窗⼝中的伪变量Watch窗⼝或QuickWatch对话框提供⼀些特定的(调试器可识别的)变量,被称为伪变量。
vs10进制转16进制方法

vs10进制转16进制方法vs10进制转16进制方法1. 简介在计算机科学和编程领域中,经常需要进行进制之间的转换。
其中,将十进制数转换为十六进制数是一种常见的操作。
本文将介绍几种常用的vs10进制转16进制的方法。
2. 方法一:除以16取余法1.将给定的十进制数除以16,得到商和余数。
2.将余数转换为十六进制数,如果余数大于9,则用字母表示(A=10,B=11,C=12,D=13,E=14,F=15)。
3.取商作为新的十进制数,重复上述步骤,直到商为0为止。
4.将所得的所有余数按照得到的顺序从右至左排列,即得到对应的十六进制数。
示例我们以十进制数231为例,进行vs10进制转16进制的操作:1.首先,231除以16得到商14余7,即231 = 14 * 16 + 7。
2.将余数7转换为十六进制数为7。
3.再将商14作为新的十进制数,重复上述步骤。
4.继续除以16,得到商0余14,即14 = 14 * 16 + 0。
5.将余数14转换为十六进制数为E。
6.最终,将所有余数按照从右至左的顺序排列,得到十六进制数为E7。
因此,十进制数231对应的十六进制数为E7。
3. 方法二:位运算法1.将十进制数转换为二进制数。
2.将二进制数每4位作为一组进行分组。
3.将每组分别转换为对应的十六进制数。
4.将所得的十六进制数按照从左至右的顺序排列,即得到最终结果。
示例以十进制数231为例,进行vs10进制转16进制的操作:1.首先,将231转换为二进制数为。
2.将二进制数按照每4位进行分组,得到1110和0111两组。
3.将每组分别转换为对应的十六进制数,得到E和7。
4.最终,将得到的十六进制数按照从左至右的顺序排列,即得到十六进制数为E7。
4. 方法三:使用编程语言的内置函数在许多编程语言中,都提供了内置函数用于实现十进制到十六进制的转换。
这些函数通常十分方便且高效。
5. 总结本文介绍了三种常用的vs10进制转16进制的方法:除以16取余法、位运算法和使用编程语言的内置函数。
实验1网络配置与网络管理软件SNMPc的使用

实验1网络配置与网络管理软件SNMPc的使用一. 实验项目:网络实验环境的搭建,网络管理软件的安装、配置和基本使用二. 实验内容:1. 构建简单实验网络,并启用各网络设备的SNMP功能;2. 网络管理软件SNMPc的安装与配置;3. 学习SNMPc的主要管理功能,掌握软件系统的基本操作。
三. 实验目的:1. 使学生掌握典型网络管理软件SNMPc的安装、配置和基本使用技能。
2. 掌握网络设备管理的基本参数配置。
3. 通过实际操作,加深对课堂上SNMP协议理论知识的理解。
四. 实验设备及环境:1. Huawei 3Com Quidway R2621路由器:1台;2. Cisco 2950网络交换机:1台;3. 计算机:2台;4. 直通双绞线2根,交叉双绞线1根,串口配置线1根;5. 网络管理软件:SNMPc7。
五. 学生分组情况:每组6人。
六. 实验步骤及要求:1. 构建实验的网络环境参照下图构建实验的网络环境。
注意:同层次设备用交叉线相连(但现在很多设备带自动翻转功能,直连也可),如交换机与交换机,计算机与计算机,计算机与路由器(可看作专用计算机);而路由器和交换机、交换机和计算机用直通线相连。
交换机以太网口1:以太网口0: IP 地址)192.0.0.3/24网关:192.0.0.1图4 实验网络拓扑结构 2. 配置各设备的网络参数并启用其网管功能:为了配置路由器或交换机,用串口线将计算机的COM 串行接口与路由器或交换机的Console 控制口相连,然后在计算机中运行超级终端进行参数设置(端口设置需还原为默认值)。
(1) 配置Cisco 2950交换机1、配置IP 地址两层交换机在数据链路层转发数据时是不需要IP 地址的,但为了使交换机要能够被网管,也可给它标识一个管理IP 地址。
默认情况下CISCO 交换机的VLAN 1为管理VLAN ,为该管理VLAN 配上IP 地址,交换机就可以被网管了。
vs2010C#串口通信程序(比较全面)

using System.IO;
namespace SerialportSample
{
public partial class SerialportSampleForm : Form
{
private int ijinzhi_16 = 0;
comboBaudrate.SelectedIndex = comboBaudrate.Items.IndexOf("9600"); //默认波特率是9600
comm.Parity = comboBox1.SelectedValue.ToString() == "0" ? Parity.None : (comboBox1.SelectedValue.ToString() == "1" ? Parity.Odd : Parity.Even); //串口获取奇偶校验位
//设置数据位的属性(以下两行)
comboBox1.DisplayMember = "DisplayMember";
comboBox1.ValueMember = "ValueMember";
comboBox1.SelectedIndex = 0; //默认选择“Even”
{
//向数据位下拉中添加选项
comboBox2.Items.Add("6");
comboBox2.Items.Add("7"34;8");
if (((int)Parity.None).Equals(i)) //数据位中的选项为“None”时
fortran常见错误及其原因

常见fortran错误1. Incrementally linked image--PC correlation disabled.!编译终止2. forrtl: severe (157): Program Exception - access violation!The program tried to read from or write to a virtual address for which it does not have the appropriate access. Try recompiling with the /check:bounds and /warn:argument_checking options set, to see if the problem is an out-of-bounds memory reference or a argument mismatch that causes data to be treated as an address.Other causes of this error include:Mismatches in C vs. STDCALL calling mechanisms, causing the stack to become corrupted References to unallocated pointers Attempting to access a protected (for example, read-only) address3 "forrtl: severe (64): input conversion error, unit 2, file D:\FORTRAN2\testi!文件testi正在读写,直到读写到2时错误。
举例:程序想读写整数,却碰到变量故终止。
4 error LNKZOOI : unresolved external symbol _ SN @ 4 fatal error LNKllZO : 1 unresolved externals! 出现了未指定的外部函数符号Sn 。
智能巡检管理系统

智能巡检管理系统VsTech V4.0使用手册二○○三年十月前言感谢您使用我们的“智能巡检管理系统”。
本手册适用于:巡更巡检管理系统V4.0版郑重声明●未经本公司许可,本手册及软件的任何部分不得以任何方式复制或抄袭。
●因使用不当引起的损失,本公司概不承担任何责任。
为了您能正确地设置和使用本系统并得到最佳性能,保证长期使用,请必须仔细阅读本操作手册。
●因技术发展需要,本公司保留未经通告而变更本手册、软件及硬件产品性能指标的权利。
●使用时请注意爱护产品,这是延长其寿命的最好方法。
●Microsoft和MS-DOS是微软公司的注册商标。
Windows是微软公司的产品商标。
所有其它的公司名称和产品名称都是其所有者的产品商标和注册商标目录目录 (3)概念 (4)第一部分系统介绍 (5)第1章巡更巡检系统介绍 (5)第2章工作原理 (5)第3章系统组成及技术参数 (5)第4章工作过程 (6)第5章系统特点 (6)第二部分软件安装 (7)第6章PC机配置要求 (7)第7章安装过程 (7)第三部分软件使用说明 (8)第8章功能结构 (9)第9章主界面 (10)第10章系统管理 (10)10.1 巡检器 (10)10.2 操作员登录 (12)10.3 操作员注消 (12)10.4退出 (12)第11 章资源管理 (13)11.1 巡检地点管理 (13)11.2 巡检人员 (14)11.3 巡检器号码 (15)11.4 巡检事件 (16)11.5 设置巡检线路 (17)11.6 制定巡检计划 (17)第12章巡检数据 (20)12.1巡检考核 (20)12.2记录查询 (21)第13章系统维护 (21)13.1 参数设置 (21)13.2 数据备份 (22)13.3 恢复备份 (22)13.4 系统操作人员 (22)13.5 修改密码 (23)13.6 系统初始化 (23)第14章帮助 (24)14.1系统操作指南 (24)14.1关于巡检管理系统 (24)第四部分常见故障排除 (25)15.1 终端错误提示表 (25)15.2故障排除 (25)概念解释本手册中一部分特定名称解释如下:♦地点:巡检时所要到达的地点,即电子标签安装的地点。
Windows编程中宽字符处理与常见问题

Windows编程中宽字符处理与常见问题一、宽字符集(unicode)操作函数简介字符分类:宽字符函数普通C函数描述iswalnum() isalnum() 测试字符是否为数字或字母iswalpha() isalpha() 测试字符是否是字母iswcntrl() iscntrl() 测试字符是否是控制符iswdigit() isdigit() 测试字符是否为数字iswgraph() isgraph() 测试字符是否是可见字符iswlower() islower() 测试字符是否是小写字符iswprint() isprint() 测试字符是否是可打印字符iswpunct() ispunct() 测试字符是否是标点符号iswspace() isspace() 测试字符是否是空白符号iswupper() isupper() 测试字符是否是大写字符iswxdigit() isxdigit() 测试字符是否是十六进制的数字大小写转换:宽字符函数普通C函数描述towlower() tolower() 把字符转换为小写towupper() toupper() 把字符转换为大写字符比较:wcscoll() strcoll() 比较字符串日期和时间转换:宽字符函数描述strftime() 根据指定的字符串格式和locale设置格式化日期和时间wcsftime() 根据指定的字符串格式和locale设置格式化日期和时间, 并返回宽字符串strptime() 根据指定格式把字符串转换为时间值, 是strftime的反过程打印和扫描字符串:宽字符函数描述fprintf()/fwprintf() 使用vararg参量的格式化输出fscanf()/fwscanf() 格式化读入printf() 使用vararg参量的格式化输出到标准输出scanf() 从标准输入的格式化读入sprintf()/swprintf() 根据vararg参量表格式化成字符串sscanf() 以字符串作格式化读入vfprintf()/vfwprintf() 使用stdarg参量表格式化输出到文件vprintf() 使用stdarg参量表格式化输出到标准输出vsprintf()/vswprintf() 格式化stdarg参量表并写到字符串数字转换:wcstod() strtod() 把宽字符的初始部分转换为双精度浮点数wcstol() strtol() 把宽字符的初始部分转换为长整数wcstoul() strtoul() 把宽字符的初始部分转换为无符号长整数多字节字符和宽字符转换及操作:宽字符函数描述mblen() 根据locale的设置确定字符的字节数mbstowcs() 把多字节字符串转换为宽字符串mbtowc()/btowc() 把多字节字符转换为宽字符wcstombs() 把宽字符串转换为多字节字符串wctomb()/wctob() 把宽字符转换为多字节字符输入和输出:宽字符函数普通C函数描述fgetwc() fgetc() 从流中读入一个字符并转换为宽字符fgetws() fgets() 从流中读入一个字符串并转换为宽字符串fputwc() fputc() 把宽字符转换为多字节字符并且输出到标准输出fputws() fputs() 把宽字符串转换为多字节字符并且输出到标准输出串getwc() getc() 从标准输入中读取字符, 并且转换为宽字符getwchar() getchar() 从标准输入中读取字符, 并且转换为宽字符None gets() 使用fgetws()putwc() putc() 把宽字符转换成多字节字符并且写到标准输出putwchar() getchar() 把宽字符转换成多字节字符并且写到标准输出None puts() 使用fputws()字符串操作:宽字符函数普通C函数描述wcscat() strcat() 把一个字符串接到另一个字符串的尾部wcsncat() strncat() 类似于wcscat(), 而且指定粘接字符串的粘接长度.wcschr() strchr() 查找子字符串的第一个位置wcsrchr() strrchr() 从尾部开始查找子字符串出现的第一个位置wcspbrk() strpbrk() 从一字符字符串中查找另一字符串中任何一个字符第一次出现的位置wcswcs()/wcsstr() strchr() 在一字符串中查找另一字符串第一次出现的位置wcscspn() strcspn() 返回不包含第二个字符串的的初始数目wcsspn() strspn() 返回包含第二个字符串的初始数目wcscpy() strcpy() 拷贝字符串wcsncpy() strncpy() 类似于wcscpy(), 同时指定拷贝的数目wcscmp() strcmp() 比较两个宽字符串wcsncmp() strncmp() 类似于wcscmp(), 还要指定比较字符字符串的数目wcslen() strlen() 获得宽字符串的数目wcstok() strtok() 根据标示符把宽字符串分解成一系列字符串wcswidth() None 获得宽字符串的宽度wcwidth() None 获得宽字符的宽度另外还有对应于memory操作的 wmemcpy(), wmemchr(), wmemcmp(),看这篇文章,讲的很清楚UNICODE环境设置在安装Visual Studio时,在选择VC++时需要加入unicode选项,保证相关的库文件可以拷贝到system32下。
用C#在VS2010中开发串口工具时遇到的问题及解决方法

公司需要做一个串口调试软件,和普通的串口助手有些不同,在开发过程中遇到了一些问题,这个文档是问题和解决方法的总结,还有在解决问题时查询的一些知识性的东西,文档是笔记性质的,比较乱,希望对大家有帮助。
VS2010 尝试运行项目时出错:无法启动调试两个解决方法:1) 打开项目属性,选择调试选项卡,将“启用非托管代码调试”一项钩上。
2) 打开项目属性,选择调试选项卡,将“启用Visual Studio宿主进程“一项钩掉。
C#中在窗体1中单击按钮打开窗体2,出错原因是ob_FrmCom.show应该是大写的ob_FrmCom.Show误双击控件生成的代码如何删掉?双击错误列表的提示,跳转到窗体的定义文件中,只要将带蓝线的的那一整行删掉,然后保存生成一次就可以了!问题:Windows已在“xxx.exe”中触发了一个断点。
其原因可能是堆被破坏,这说明xxx.exe中或它所加载的任何DLL中有Bug。
原因也可能是用户在xxx.exe具有焦点时按下F12.输出窗口可能提供了更多诊断信息。
原因:1. 内存越界,比如“数组越界”、“释放已经释放掉的内存”、“共享内存引发的问题”、“释放野指针的问题”等。
2. 用到的第三方库版本不一致,比如“VS2010用到VS2013生成的DLL”、“Debug模式下用了Release模式下生成的库”、“代码生成中的MDD和MD”,可能还有其他第三方库的版本不一致问题。
如果之前没有这样的错误,突然出现了,很可能是你不小心delete了一个野指针。
vs2010C#编程中删除一个控件和相关的能看见的代码后出现错误:当前上下文中不存在名称"…"(控件名称)关闭解决方案后重新打开就好了.c#如何连接两个字符串用vs2005的c#写网页,我定义了两个字符串,一个是yy="2008",另一个是mm="10",如何把两个字符串连起来变成"200810"?如果是简单的连接的话,用+就可以了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用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;
UpdateHexStr1Len.Format("%s%d%s", "字节=[", HexStr1.GetLength(), "]");
//SetDlgItemText(IDC_STATIC_STR1, UpdateHexStr1Len );
GetDlgItem(IDC_STATIC_STR1)->SetWindowTextA(UpdateHexStr1Len);
}
4 设置TAB键切换连续输入
如何让用户在输入完第一个字符串后,按TAB键直接跳到第二个十六进制字符串输入框中?这个就涉及到对话框中所有空间的排序了。
在visual studio 2013中按“Ctrl+D”就会显示对话框所有空间的序号了,分别点击两个不同的控件,就能交换二者的序号。
如图所示,只要将第一个字符串输入框控件和第二个字符串输入框控件的序号设置为1、2这两个连续的序号即可实现TAB键连续输入,而不用使用鼠标了。
5 避免回车键直接关闭工具(对话框)
直接将“进行异或”这个按钮属性中的Default Button设置为"TRUE",这样如果用户直接回车就不会关闭工具(对话框)了。
同时,用户的回车会直接触发这个按钮对应的事件OnBnClickedButton1,也就相当于用户点击了这个按钮,直接对这两个字符串进行异或处理。