原贴地址:
http://community.csdn.net/Expert/topic/4825/4825682.xml?temp=.4218408
我提供的函数有问题(不是说不能取得正确结果)
其实HEX2DEC并没有我提供的代码那么麻烦,可能对一些初学者造成了误导,在此道歉。
更正该函数如下:
Public Function Hex2Dec(InputData As String) As Double
Hex2Dec = "&H" & InputData
End Function
测试时请使用如下代码:
Public Function Hex2Dec(InputData As String) As Double
Hex2Dec = "&H" & InputData
End Function
Private Sub Form_Paint()
Me.AutoRedraw = True
Me.Height = 6180
Me.Width = 9990
Dim i As Long
For i = 0 To 31
Print i; Hex(i); Hex2Dec(CStr(Hex(i))), _
i + 32; Hex(i + 32); Hex2Dec(CStr(Hex(i + 32))), _
i + 64; Hex(i + 64); Hex2Dec(CStr(Hex(i + 64))), _
i + 96; Hex(i + 96); Hex2Dec(CStr(Hex(i + 96))), _
i + 128; Hex(i + 128); Hex2Dec(CStr(Hex(i + 128))), _
i + 160; Hex(i + 160); Hex2Dec(CStr(Hex(i + 160))), _
i + 192; Hex(i + 192); Hex2Dec(CStr(Hex(i + 192))), _
i + 224; Hex(i + 224); Hex2Dec(CStr(Hex(i + 224)))
Next
End Sub
虽然分少点,,我想2004chenlong还是不会介意的吧:)回一下拿分
9 个解决方案
#1
还是有问题呢。。。郁闷啊,把函数返回值声明为LONG比较好。哎。。老伤心了
#2
Private Sub C1_Click()
Dim n As Integer, a As Double
n = Len(Text1.Text)
If O1(2).Value = True Then
For i = 0 To n - 1
a = a + Val(Mid(Text1.Text, i + 1, 1)) * (2 ^ (n - i - 1))
Next i
Text1.Text = a
ElseIf O1(8).Value = True Then
For i = 0 To n - 1
a = a + Val(Mid(Text1.Text, i + 1, 1)) * (8 ^ (n - i - 1))
Next i
Text1.Text = a
ElseIf O1(16).Value = True Then
For i = 0 To n - 1
b = Mid(Text1.Text, i + 1, 1)
a = a + Val(BToH(b)) * (16 ^ (n - i - 1))
Next i
Text1.Text = a
End If
End Sub
Public Function BToH(ByVal b As String) As String
Select Case b
Case "1": H = 1
Case "2": H = 2
Case "3": H = 3
Case "4": H = 4
Case "5": H = 5
Case "6": H = 6
Case "7": H = 7
Case "8": H = 8
Case "9": H = 9
Case "A": H = 10
Case "B": H = 11
Case "C": H = 12
Case "D": H = 13
Case "E": H = 14
Case "F": H = 15
Case "0": H = 0
End Select
BToH = H
End Functio
这是我刚写出来的 能用不过就是多了点~~ 2进制 8进制都有
#3
没分不回答,我更抠门,呵呵
#4
如何将一串16进制的还原成10进制
比如把FFFF还原成65535
Private Sub Command1_Click()
Debug.Print Hex2Dec("FFFF")
End Sub
Public Function Hex2Dec(InputData As String) As Double
Dim tmp As Double
inlen = Len(InputData)
If inlen Mod 2 = 1 Then InputData = "0" & InputData: inlen = inlen + 1
t = 1
For i = inlen \ 2 To 1 Step -1
tmp = tmp + t * CInt("&H" & Mid(InputData, i * 2 - 1, 2))
t = t * 256
Next
Hex2Dec = tmp
End Function
比如把FFFF还原成65535
Private Sub Command1_Click()
Debug.Print Hex2Dec("FFFF")
End Sub
Public Function Hex2Dec(InputData As String) As Double
Dim tmp As Double
inlen = Len(InputData)
If inlen Mod 2 = 1 Then InputData = "0" & InputData: inlen = inlen + 1
t = 1
For i = inlen \ 2 To 1 Step -1
tmp = tmp + t * CInt("&H" & Mid(InputData, i * 2 - 1, 2))
t = t * 256
Next
Hex2Dec = tmp
End Function
#5
TO:二位楼上:
我不是问问题,只是对以前的回答道歉,这些进制转换函数我都有现成的代码,写也不麻烦,多是根据数制的原有换算方式转换的,但是16进制到10进制可以由VB来完成,看看我给的代码就知道了,一行就可以把16进制转为10进制
boiciy(喜欢去哪去哪) 你写的代码是不是有问题啊,你用我给的函数试试,
Public Function Hex2Dec(InputData As String) As Double
Hex2Dec = "&H" & InputData
End Function
Private Sub Form_Paint()
print Hex2Dec("FFFF")
End Sub
看看返回结果是什么?65535,一点都不差。虽然我在演示代码里面只用了0-255,但是实际上,VB在数据不溢出的情况下可以直接把任意一个16进制转换为10进制,实现方法就是在16进制字符串前加&H,然后将这个字符赋值给一个数值变量,一般来说长整就够了,但是也有更长的,那就可以用双精度或变体等类型。
我只所以用0-255进行演示而没有提上面这个问题,主要是因为原贴是将2位的16进制还原。。
看来我发这个帖子还真是有必要,呵呵,虽然原贴作者还没来,但可能已经让2位楼上有所感悟了
我不是问问题,只是对以前的回答道歉,这些进制转换函数我都有现成的代码,写也不麻烦,多是根据数制的原有换算方式转换的,但是16进制到10进制可以由VB来完成,看看我给的代码就知道了,一行就可以把16进制转为10进制
boiciy(喜欢去哪去哪) 你写的代码是不是有问题啊,你用我给的函数试试,
Public Function Hex2Dec(InputData As String) As Double
Hex2Dec = "&H" & InputData
End Function
Private Sub Form_Paint()
print Hex2Dec("FFFF")
End Sub
看看返回结果是什么?65535,一点都不差。虽然我在演示代码里面只用了0-255,但是实际上,VB在数据不溢出的情况下可以直接把任意一个16进制转换为10进制,实现方法就是在16进制字符串前加&H,然后将这个字符赋值给一个数值变量,一般来说长整就够了,但是也有更长的,那就可以用双精度或变体等类型。
我只所以用0-255进行演示而没有提上面这个问题,主要是因为原贴是将2位的16进制还原。。
看来我发这个帖子还真是有必要,呵呵,虽然原贴作者还没来,但可能已经让2位楼上有所感悟了
#6
觉得先不结贴比较好,原贴作者还没回,另外就是这个问题,还是值得新手思考的,其实还有一些进制转换可以不采用进制原换算方法来进行,并且能够减少代码数量或提高运行效率,就当抛砖引玉了,大家写出来发到这里看看
各位高手路过顶一下啊,呵呵,做点公益。。。
各位高手路过顶一下啊,呵呵,做点公益。。。
#7
谢谢 又让 我考虑到个问题~~
#8
带小数点的 怎么写简单点啊~~
我想了下 好象不少~》???楼主
我想了下 好象不少~》???楼主
#9
能带小数点啊,哎呀?
分开,都按整算,然后恢复小数点后面
分开,都按整算,然后恢复小数点后面
#1
还是有问题呢。。。郁闷啊,把函数返回值声明为LONG比较好。哎。。老伤心了
#2
Private Sub C1_Click()
Dim n As Integer, a As Double
n = Len(Text1.Text)
If O1(2).Value = True Then
For i = 0 To n - 1
a = a + Val(Mid(Text1.Text, i + 1, 1)) * (2 ^ (n - i - 1))
Next i
Text1.Text = a
ElseIf O1(8).Value = True Then
For i = 0 To n - 1
a = a + Val(Mid(Text1.Text, i + 1, 1)) * (8 ^ (n - i - 1))
Next i
Text1.Text = a
ElseIf O1(16).Value = True Then
For i = 0 To n - 1
b = Mid(Text1.Text, i + 1, 1)
a = a + Val(BToH(b)) * (16 ^ (n - i - 1))
Next i
Text1.Text = a
End If
End Sub
Public Function BToH(ByVal b As String) As String
Select Case b
Case "1": H = 1
Case "2": H = 2
Case "3": H = 3
Case "4": H = 4
Case "5": H = 5
Case "6": H = 6
Case "7": H = 7
Case "8": H = 8
Case "9": H = 9
Case "A": H = 10
Case "B": H = 11
Case "C": H = 12
Case "D": H = 13
Case "E": H = 14
Case "F": H = 15
Case "0": H = 0
End Select
BToH = H
End Functio
这是我刚写出来的 能用不过就是多了点~~ 2进制 8进制都有
#3
没分不回答,我更抠门,呵呵
#4
如何将一串16进制的还原成10进制
比如把FFFF还原成65535
Private Sub Command1_Click()
Debug.Print Hex2Dec("FFFF")
End Sub
Public Function Hex2Dec(InputData As String) As Double
Dim tmp As Double
inlen = Len(InputData)
If inlen Mod 2 = 1 Then InputData = "0" & InputData: inlen = inlen + 1
t = 1
For i = inlen \ 2 To 1 Step -1
tmp = tmp + t * CInt("&H" & Mid(InputData, i * 2 - 1, 2))
t = t * 256
Next
Hex2Dec = tmp
End Function
比如把FFFF还原成65535
Private Sub Command1_Click()
Debug.Print Hex2Dec("FFFF")
End Sub
Public Function Hex2Dec(InputData As String) As Double
Dim tmp As Double
inlen = Len(InputData)
If inlen Mod 2 = 1 Then InputData = "0" & InputData: inlen = inlen + 1
t = 1
For i = inlen \ 2 To 1 Step -1
tmp = tmp + t * CInt("&H" & Mid(InputData, i * 2 - 1, 2))
t = t * 256
Next
Hex2Dec = tmp
End Function
#5
TO:二位楼上:
我不是问问题,只是对以前的回答道歉,这些进制转换函数我都有现成的代码,写也不麻烦,多是根据数制的原有换算方式转换的,但是16进制到10进制可以由VB来完成,看看我给的代码就知道了,一行就可以把16进制转为10进制
boiciy(喜欢去哪去哪) 你写的代码是不是有问题啊,你用我给的函数试试,
Public Function Hex2Dec(InputData As String) As Double
Hex2Dec = "&H" & InputData
End Function
Private Sub Form_Paint()
print Hex2Dec("FFFF")
End Sub
看看返回结果是什么?65535,一点都不差。虽然我在演示代码里面只用了0-255,但是实际上,VB在数据不溢出的情况下可以直接把任意一个16进制转换为10进制,实现方法就是在16进制字符串前加&H,然后将这个字符赋值给一个数值变量,一般来说长整就够了,但是也有更长的,那就可以用双精度或变体等类型。
我只所以用0-255进行演示而没有提上面这个问题,主要是因为原贴是将2位的16进制还原。。
看来我发这个帖子还真是有必要,呵呵,虽然原贴作者还没来,但可能已经让2位楼上有所感悟了
我不是问问题,只是对以前的回答道歉,这些进制转换函数我都有现成的代码,写也不麻烦,多是根据数制的原有换算方式转换的,但是16进制到10进制可以由VB来完成,看看我给的代码就知道了,一行就可以把16进制转为10进制
boiciy(喜欢去哪去哪) 你写的代码是不是有问题啊,你用我给的函数试试,
Public Function Hex2Dec(InputData As String) As Double
Hex2Dec = "&H" & InputData
End Function
Private Sub Form_Paint()
print Hex2Dec("FFFF")
End Sub
看看返回结果是什么?65535,一点都不差。虽然我在演示代码里面只用了0-255,但是实际上,VB在数据不溢出的情况下可以直接把任意一个16进制转换为10进制,实现方法就是在16进制字符串前加&H,然后将这个字符赋值给一个数值变量,一般来说长整就够了,但是也有更长的,那就可以用双精度或变体等类型。
我只所以用0-255进行演示而没有提上面这个问题,主要是因为原贴是将2位的16进制还原。。
看来我发这个帖子还真是有必要,呵呵,虽然原贴作者还没来,但可能已经让2位楼上有所感悟了
#6
觉得先不结贴比较好,原贴作者还没回,另外就是这个问题,还是值得新手思考的,其实还有一些进制转换可以不采用进制原换算方法来进行,并且能够减少代码数量或提高运行效率,就当抛砖引玉了,大家写出来发到这里看看
各位高手路过顶一下啊,呵呵,做点公益。。。
各位高手路过顶一下啊,呵呵,做点公益。。。
#7
谢谢 又让 我考虑到个问题~~
#8
带小数点的 怎么写简单点啊~~
我想了下 好象不少~》???楼主
我想了下 好象不少~》???楼主
#9
能带小数点啊,哎呀?
分开,都按整算,然后恢复小数点后面
分开,都按整算,然后恢复小数点后面