【问题标题】:Code to convert from Hexa to Binary Excel VBA a large number [duplicate]将十六进制转换为二进制Excel VBA的代码大量[重复]
【发布时间】: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

【问题讨论】:

  • 为什么参数是可选的,为什么会有HexNum module-scope 变量?这使得HexNum 参数隐藏了HexNum 字段,这使得调试比需要的复杂得多。
  • 您希望HexToBin (HexNum) 行捕获局部变量中的返回值,而不是重新调用函数以在 msgbox 中(非常间接地)显示其输出。
  • 您的算法有问题。 "FFFF"(-1) 产生1
  • 我是菜鸟,对不起。在我的实习经历中,我只是从编程语言开始。我只想将十个 carachters hexa 转换为 bin 编号。这是我的第一次尝试。
  • 你是对的。我还没有尝试过FFFF。我使用的是 A1、B23 等。

标签: excel vba binary hex


【解决方案1】:

来自HERE的函数

仅用于帮助调用 OP 遇到问题的函数。

Public Sub Test()

    Dim HexNum As String
    HexNum = "6E29210100"

    Dim BinNum As String
    BinNum = HEXtoBIN(HexNum)

    MsgBox BinNum

End Sub

Public Function HEXtoBIN(ByVal strHex As String) As String
    Dim c As Long, i As Long, b As String * 4, j As Long
    For c = 1 To Len(strHex)
        b = "0000"
        j = 0
        i = Val("&H" & Mid$(strHex, c, 1))
        While i > 0
            Mid$(b, 4 - j, 1) = i Mod 2
            i = i \ 2
            j = j + 1
        Wend
        HEXtoBIN = HEXtoBIN & b
    Next
    HEXtoBIN = RTrim$(HEXtoBIN)
End Function

【讨论】:

    猜你喜欢
    • 2014-03-16
    • 2019-01-01
    • 1970-01-01
    • 2012-06-26
    • 2017-12-30
    • 2017-03-19
    • 1970-01-01
    • 2016-08-28
    相关资源
    最近更新 更多