|
我一直觉得,进制转换不应该是一个问题。毕竟Excel自带各种进制转换。不过今天有个群友提及,说是输入数据大小超过了限制,无法显示正确结果。其实也没什么奇怪,毕竟Excel不太可能为这个进制转换把很大的数都算进来,所以当时给他的建议是,考虑负数补码来处理。
例如,16进制的222(2*16*16+2*16+2*1=546),超过了10位的表示(2^9=512,注意,进制是从0次方开始的),因此输入:=HEX2BIN("222")就会出错。
所以,不如我们试着写一个自定义函数?我们知道,16进制转2进制,只需要将每一个字符转为4个二进制字符就好了(2^4=16),再把这些“4位字符”拼接起来,就是一个二进制结果了。
- Function HexToBin(ByVal strInput As String) As String
- Dim i As Long
- Dim j As Long
- Dim strOutPut As String
- Dim strResult As String
- For i = 1 To Len(strInput)
- Select Case Mid(strInput, i, 1)
- Case "0"
- strOutPut = "0000"
- Case "1"
- strOutPut = "0001"
- Case "2"
- strOutPut = "0010"
- Case "3"
- strOutPut = "0011"
- Case "4"
- strOutPut = "0100"
- Case "5"
- strOutPut = "0101"
- Case "6"
- strOutPut = "0110"
- Case "7"
- strOutPut = "0111"
- Case "8"
- strOutPut = "1000"
- Case "9"
- strOutPut = "1001"
- Case "A"
- strOutPut = "1010"
- Case "B"
- strOutPut = "1011"
- Case "C"
- strOutPut = "1100"
- Case "D"
- strOutPut = "1101"
- Case "E"
- strOutPut = "1110"
- Case "F"
- strOutPut = "1111"
- End Select
- strResult = strResult & strOutPut
- Next
- HexToBin = strResult
- End Function
- Sub test()
- Debug.Print HexToBin("222")
- End Sub
复制代码 当然如果你想处理的话,也可以把前面的0去掉,这样或许更符合大家的习惯。可以把function的最后一句改成:HexToBin = Right(strResult, InStrRev(strResult, "1") - 1)
最后,给一个补码:FFFFFFFE22,写法如下:=HEX2BIN("FFFFFFFE22"),值得注意的是,在Excel中转十进制时,这个将会是负数。但按二进制正数的算法,确实可以得到546(222的16进制)。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|