Office中国论坛/Access中国论坛

标题: 【数组公式】十六进制转二进制 [打印本页]

作者: roych    时间: 2023-6-19 15:28
标题: 【数组公式】十六进制转二进制
今天有人在群里问如何将16进制转为2进制。当时说用HEX2BIN就好了。他说,位数比较多时不行,例如,16位。于是想了想,写了个数组公式给他:
[attach]64580[/attach]
这是一个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将这些字符串进行拼接,从而得到最终的结果。
附件如下,供有需要的版友使用。
[attach]64581[/attach]
如果需要在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复杂一些。





欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3