进制数转换器的VB算法实现(2/8/10/16进制数可以相互转换) 您所在的位置:网站首页 关于vb源代码的编写 进制数转换器的VB算法实现(2/8/10/16进制数可以相互转换)

进制数转换器的VB算法实现(2/8/10/16进制数可以相互转换)

2024-07-14 14:17| 来源: 网络整理| 查看: 265

【程 计】

1、实现281016进制数之间的相互转换,一共有种 转换方式,即:2--->82--->102--->168--->28--->108--->1610--->210--->810--->1616--->216--->816--->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,一旦r11,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进制数只能由01构成,8制数只能由01----7构成,10进制数只能由01-------9构成,16进制数只能由01------9ab-----fAB------F构成。

所以我们需要一个keypress事件来控件这种形为,让各自对应的文本框只能按受对应的按键值。text1keypress事件代码:

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 实验室设备网 版权所有