设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

【数组公式】十六进制转二进制

[复制链接]
跳转到指定楼层
1#
发表于 2023-6-19 15:28:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天有人在群里问如何将16进制转为2进制。当时说用HEX2BIN就好了。他说,位数比较多时不行,例如,16位。于是想了想,写了个数组公式给他:

这是一个16位”f“转的结果。数组公式如下:
  1. {=CONCAT(TEXT(HEX2BIN(MID(A1,ROW(INDIRECT("1:"& LEN(A1))),1)),"0000"))}
复制代码
表示的是,先通过len来计算字符串个数,然后使用indirect函数将拼接号的字符串转为对应的单元格地址,然后使用row函数将单元格地址转为数值,这时候再使用mid函数来截取,就会将每个字符分别放置在对应的行里。
接着使用HEX2BIN函数对每行的单个字符进行转换,并通过text函数转为长度为4位数的字符串。这是因为十六进制中,最大值15转为字符串为4个1,因此需要这样设置。
最后通过concat将这些字符串进行拼接,从而得到最终的结果。
附件如下,供有需要的版友使用。

如果需要在Access中实现,则需要考虑VBA了。方法类似,做法上有两种:
1、将0-9A-F部分以穷举方式分别列出对应的二进制字符串,后续,再通过逐个字符串匹配,返回所对应的二进制字符串,进行拼接。
2、A-F通过ASC方法,写一个循环字符串返回ASCII码的循环,例如,ASC("A")=65,ASC("F")=70,将这个ASC码减去55,恰好等于10-15.接下来再写一个0-15的十六进制转二进制的方法,调用即可。最后同样执行拼接。
总体来说,方法1相对简单,但略有hard code(硬编码)之嫌。方法2复杂一些。

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-4-28 18:46 , Processed in 0.096116 second(s), 25 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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