【发布时间】:2019-08-20 17:27:23
【问题描述】:
我正在尝试将 6E29210100(六进制)转换为二进制。 使用较小的十六进制数,代码可以正常工作。我不知道为什么。 我希望它至少可以使用 10 个字符。
Dim HexNum As String
Dim BinNum As String
Dim lHexNum As Long
Dim i As Integer
Public Sub Teste()
HexNum = "6E29210100"
HexToBin (HexNum)
MsgBox "Bin: " & HexToBin
BinNum = vbNullString
End Sub
Public Function HexToBin(Optional HexNum As String) As String
On Error GoTo ErrorHandler
i = 0
lHexNum = Val("&h" & HexNum)
Do
If lHexNum And 2 ^ i Then
BinNum = "1" & BinNum
Else
BinNum = "0" & BinNum
End If
i = i + 1
Loop Until 2 ^ i > lHexNum
HexToBin = BinNum
ErrorHandler:
End Function
代码返回:00101001001000010000000100000000
正确答案:0110111000101001001000010000000100000000
【问题讨论】:
-
为什么参数是可选的,为什么会有
HexNummodule-scope 变量?这使得HexNum参数隐藏了HexNum字段,这使得调试比需要的复杂得多。 -
您希望
HexToBin (HexNum)行捕获局部变量中的返回值,而不是重新调用函数以在 msgbox 中(非常间接地)显示其输出。 -
您的算法有问题。
"FFFF"(-1) 产生1。 -
我是菜鸟,对不起。在我的实习经历中,我只是从编程语言开始。我只想将十个 carachters hexa 转换为 bin 编号。这是我的第一次尝试。
-
你是对的。我还没有尝试过FFFF。我使用的是 A1、B23 等。