现在的位置: 首页 > 综合 > 正文

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

2013年09月11日 ⁄ 综合 ⁄ 共 1780字 ⁄ 字号 评论关闭

VB6中新建一个工程,当前窗体默认为form1,添加一个框架控件frame、几个文本框控件text、几个标签控件label、两个timer计时器、三个按钮控件、添加一个窗体form2、一个模块module1、几个菜单项。然后将form1上的各个控件调至适当位置,并且更改它们的标题属性。注意:那四个文本框为文本框控件数组,分别为text1(0)text1(1)text1(2)text1(3)

 

【程 计】

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 <= 57, a - 48, a - 87)

  '0ASCII码为48,字母aASCII码为97,16进制下的A对应为10进制下的10

  '如果a16进制下为 0 9 的数,则-------

  '如果a16进制下为 a f 的数,则-------

    k = k + (16 ^ i) * a      '累加,就像 12345=1*10^4+2*10^3+3*10^2+4*10^1+5*1^0

 Next

  HexToDec = k              '得到的这个返回值 K 就是转换后的10进制数

End Function

'10进制转换成16进制数

Public Function DecToHex(X As Long) As String

Dim a As String

Dim r As String

Do While X > 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进制数

抱歉!评论已关闭.