2、8、10、16进制数相互转换的12种算法

Option Explicit<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

'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

<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><place w:st="on">Loop</place>

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

<place w:st="on"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; mso-bidi-font-size: 12.0pt">Loop</span></b></place>

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

<place w:st="on">Loop</place>

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值