LibreOffice Calc无宏实现凯撒密码:字符ASCII获取公式报错求助
LibreOffice Calc 无宏实现凯撒密码:字符ASCII编码获取错误解决
错误原因
你使用的REGEX公式中,UNICODE("$1")不会解析正则捕获组的$1,而是直接将字符串"$1"作为参数计算——$字符的Unicode编码是36,所以返回四次36。
正确获取字符ASCII编码的方法
1. 单个字符提取
要提取字符串中第n个字符的编码,用以下公式(n从1开始):
=UNICODE(MID(K15, n, 1))
比如提取"test"的第一个字符t,就用=UNICODE(MID(K15,1,1)),返回116。
2. 批量生成所有字符编码数组
用数组公式一次性获取字符串中所有字符的编码,输入公式后按Ctrl+Shift+Enter触发:
=ARRAYFORMULA(UNICODE(MID(K15,ROW(INDIRECT("1:"&LEN(K15))),1)))
针对"test",这个公式会返回116;101;115;116的数组结果。
延伸:无宏实现凯撒密码完整公式
假设偏移量存放在A1单元格(比如偏移3),以下公式可直接将K15的字符串转换为凯撒密码加密后的结果:
=TEXTJOIN("",TRUE,ARRAYFORMULA(CHAR( IF( AND(UNICODE(MID(K15,ROW(INDIRECT("1:"&LEN(K15))),1))>=65,UNICODE(MID(K15,ROW(INDIRECT("1:"&LEN(K15))),1))<=90), MOD(UNICODE(MID(K15,ROW(INDIRECT("1:"&LEN(K15))),1))-65+A1,26)+65, IF( AND(UNICODE(MID(K15,ROW(INDIRECT("1:"&LEN(K15))),1))>=97,UNICODE(MID(K15,ROW(INDIRECT("1:"&LEN(K15))),1))<=122), MOD(UNICODE(MID(K15,ROW(INDIRECT("1:"&LEN(K15))),1))-97+A1,26)+97, UNICODE(MID(K15,ROW(INDIRECT("1:"&LEN(K15))),1)) ) ) )))
这个公式会保留非英文字符不变,仅对大小写字母进行偏移加密。
内容的提问来源于stack exchange,提问作者Mortith
相关产品推荐
相关产品推荐

