excel VBA 单元格输入值如何转成十六进制数组

我自定义了一个CRC校验函数如下:
Public Function CRC16_8(ByVal DATA As String) As Long
Dim I As Long, J As Long, v() As Byte: v = DATA
Dim CRC As Long: CRC = &HFFFF&
For I = 0 To UBound(v)
CRC = (CRC \ 256) * 256& + (CRC Mod 256&) Xor V(I)
For J = 0 To 7
If (CRC And 1) Then
CRC = (CRC \ 2) Xor &H8408&
Else
CRC = (CRC \ 2) '
End If
Next J
Next I
CRC16_8 = CRC
End Function

本意是想比如一个单元格中输入1~4个字节的0~F,比如输入FFAAFF55,V(I)数组储存十六进制的{FF,AA,FF,55}的形式,然后计算该输入值的CRC校验值。以上程序调试过程中发现V(I)并不是这样的存储方式,而是依次存储这些字母的ASCII码值,共16字节。请问各位大侠,在该函数中如何实现我要求的存储方式,谢谢指教!急~~~~

第1个回答  2017-02-09
如果你用的是Excel2003,需要在工具加载项里添加工程函数。
在菜单栏中点击“工具--加载宏”,在“分析工具库—VBA函数”貌前面方框内打上勾。
在B1输入公式:=DEC2HEX(A1)
结果为64

如果是Excel2007,比较简单,可直接在B1输入公式:
=DEC2HEX(A1)本回答被网友采纳
第2个回答  2017-02-10
Public Function CRC16_8(ByVal DATA As String) As Long
    Dim I As Long, J As Long, v(3)
    v(0) = Val("&H" & Mid(DATA, 1, 2))
    v(1) = Val("&H" & Mid(DATA, 3, 2))
    v(2) = Val("&H" & Mid(DATA, 5, 2))
    v(3) = Val("&H" & Mid(DATA, 7, 2))
    Dim CRC As Long: CRC = &HFFFF&
    For I = 0 To UBound(v)
        CRC = (CRC \ 256) * 256& + (CRC Mod 256&) Xor v(I)
        For J = 0 To 7
            If (CRC And 1) Then
                CRC = (CRC \ 2) Xor &H8408&
            Else
                CRC = (CRC \ 2)                   '
            End If
         Next J
    Next I
    CRC16_8 = CRC
End Function