设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2433|回复: 0
打印 上一主题 下一主题

[模块/函数] 十六进制转换为二进制

[复制链接]
跳转到指定楼层
1#
发表于 2019-10-10 11:44:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我一直觉得,进制转换不应该是一个问题。毕竟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位字符”拼接起来,就是一个二进制结果了。
  1. Function HexToBin(ByVal strInput As String) As String
  2.     Dim i As Long
  3.     Dim j As Long
  4.     Dim strOutPut As String
  5.     Dim strResult As String
  6.     For i = 1 To Len(strInput)
  7.         Select Case Mid(strInput, i, 1)
  8.             Case "0"
  9.                 strOutPut = "0000"
  10.             Case "1"
  11.                 strOutPut = "0001"
  12.             Case "2"
  13.                 strOutPut = "0010"
  14.             Case "3"
  15.                 strOutPut = "0011"
  16.             Case "4"
  17.                 strOutPut = "0100"
  18.             Case "5"
  19.                 strOutPut = "0101"
  20.             Case "6"
  21.                 strOutPut = "0110"
  22.             Case "7"
  23.                 strOutPut = "0111"
  24.             Case "8"
  25.                 strOutPut = "1000"
  26.             Case "9"
  27.                 strOutPut = "1001"
  28.             Case "A"
  29.                 strOutPut = "1010"
  30.             Case "B"
  31.                 strOutPut = "1011"
  32.             Case "C"
  33.                 strOutPut = "1100"
  34.             Case "D"
  35.                 strOutPut = "1101"
  36.             Case "E"
  37.                 strOutPut = "1110"
  38.             Case "F"
  39.                 strOutPut = "1111"
  40.         End Select
  41.         strResult = strResult & strOutPut
  42.     Next
  43.     HexToBin = strResult
  44. End Function


  45. Sub test()
  46.     Debug.Print HexToBin("222")
  47. End Sub
复制代码
当然如果你想处理的话,也可以把前面的0去掉,这样或许更符合大家的习惯。可以把function的最后一句改成:HexToBin = Right(strResult, InStrRev(strResult, "1") - 1)
最后,给一个补码:FFFFFFFE22,写法如下:=HEX2BIN("FFFFFFFE22"),值得注意的是,在Excel中转十进制时,这个将会是负数。但按二进制正数的算法,确实可以得到546(222的16进制)。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-12-1 19:30 , Processed in 0.155366 second(s), 25 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表