进制数转换器的VB算法实现(2/8/10/16进制数可以相互转换) | 您所在的位置:网站首页 › 关于vb源代码的编写 › 进制数转换器的VB算法实现(2/8/10/16进制数可以相互转换) |
【程 序 设 计】 1、实现2、8、10、16进制数之间的相互转换,一共有种 转换方式,即:2--->8,2--->10,2--->16,8--->2,8--->10,8--->16,10--->2,10--->8,10--->16,16--->2,16--->8,16--->10,这样12种转换方式 2、双击模块moduel1,进入代码编辑模式,开始编写这12种转换方式的模块函数。核心代码如下(以逗号开始的为注释内容): Option Explicit '2进制转换为10制数 Public Function BinToDec(bin As String) As Long Dim i As Long For i = 1 To Len(bin) BinToDec = BinToDec * 2 + Val(Mid(bin, i, 1)) Next End Function '10进制转换为2制数 Public Function DecToBin(dec As Long) As String DecToBin = "" Do While dec > 0 DecToBin = (dec Mod 2) & DecToBin dec = dec / 2 Loop End Function '16进制数转换为10进制数 Public Function HexToDec(str2 As String) As Long Dim i As Long, a As Variant, k As Long k = 0 For i = Len(str2) - 1 To 0 Step -1 a = Asc(LCase(Mid(str2, Len(str2) - i, 1))) '统一求得各个字符的小写状态下的字符所对应的ASCII值 a = IIf(a >= 48 And a 0 r = X Mod 16 X = X / 16 r = IIf(r > 9, Chr(Asc(r - 9) + 16), r) '如果这里不减9,一旦r为11,12,13,14,15时,就只得到 1 的ASCII码值,得到了一个错误的结果。 a = r + a Loop DecToHex = a End Function '10进制转换为8进制 Public Function DecToOct(dec As Long) As String DecToOct = "" Do While dec > 0 DecToOct = (dec Mod 8) & DecToOct dec = dec / 8 Loop End Function '8进制转换为10进制 Public Function OctToDec(str2 As String) As Long Dim i As Long, a As Variant, k As Long k = 0 For i = Len(str2) - 1 To 0 Step -1 a = Asc(Mid(str2, Len(str2) - i, 1)) '统一求得各个字符的小写状态下的字符所对应的ASCII值 a = a - 48 k = k + (8 ^ i) * a '累加,就像 12345=1*10^4+2*10^3+3*10^2+4*10^1+5*1^0 Next OctToDec = k '得到的这个返回值 K 就是转换后的10进制数 End Function '8进制转换为16进制 Public Function OctToHex(Oct As String) As String Dim dec As Long dec = OctToDec(Oct) '8进制转10进制 OctToHex = DecToHex(dec) ' 10进制转16进制 End Function '8进制转为2进制 Public Function OctToBin(Oct As String) As String Dim dec As Long dec = OctToDec(Oct) '8进制转10进制 OctToBin = DecToBin(dec) ' 10进制转2进制 End Function '16进制转为8进制 Public Function HexToOct(Hex As String) As String Dim dec As Long dec = HexToDec(Hex) '16进制转10进制 HexToOct = DecToOct(dec) '10进制转8进制 End Function '16进制转为2进制 Public Function HexToBin(Hex As String) As String Dim dec As Long dec = HexToDec(Hex) '16进制转10进制 HexToBin = DecToBin(dec) '10进制转2进制 End Function '2进制转化为16进制 Public Function BinToHex(bin As String) As String Dim dec As Long dec = BinToDec(bin) '2进制转为10进制 BinToHex = DecToHex(dec) '10进制转为16进制 End Function '2进制转化为8进制 Public Function BinToOct(bin As String) As String Dim dec As Long dec = BinToDec(bin) '2进制转化为10进制 BinToOct = DecToOct(dec) '10进制转化为8进制 End Function 3、如何判断文本框中是否输入了无效的数据,以及如何防止这种行为? 比如:2进制数只能由0和1构成,8制数只能由0、1----7构成,10进制数只能由0、1-------9构成,16进制数只能由0、1------9,a、b-----f、A、B------F构成。 所以我们需要一个keypress事件来控件这种形为,让各自对应的文本框只能按受对应的按键值。text1的keypress事件代码: Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer) Select Case Index '这个文本框为一个控件数组,即依次为text1(0),text1(1),text1(2),text1(3) Case 0 '第一个文本框,这个文本框只能输入2进进制的数,仅由0,1组成 退格键的ASCII码为8 If Not (KeyAscii >= 48 And KeyAscii = 48 And KeyAscii = 48 And KeyAscii = 97 And KeyAscii = 65 And KeyAscii 0 Then '弹出一个对话框,告诉用户当前的错误所在 result = MsgBox("很抱歉,你的操作造成了 '" + Err.Description + "'" + vbCrLf + "要清空所有的文本框,重新输入吗?", vbYesNo, "巍威提示你!") If result = 6 Then ' 如果用户回答"是",则点击清空按钮 Command2.Value = True Else ' 如果用户回答"否",则启动记时器,显示警告标语,并且转换功能的按钮不可用 Timer1.Enabled = True Command1.Enabled = False Exit Sub '退出这个过程 End If End If End Sub |
CopyRight 2018-2019 实验室设备网 版权所有 |