我目前正在做我的作业加密 SHA-1 。为了更容易,我使用Excel,因为如果我使用MS字,这将需要数天才能完成。我在Excel 2016中遇到了一些问题。
一个问题是我需要知道如何在Excel中使用Binary NOT。例如,如果我输入十六进制:
12345678
它应该将值返回到:
FFFFEDCBA987(< =因为它不是/从上面的值反转)
任何人都可以帮我找到这个公式??? (非常感谢每个细胞或1个细胞)非常感谢。
注意:如果可能的话,只需要公式,而不是VBA excel中的代码功能,因为我非常喜欢它。谢谢。
答案 0 :(得分:1)
你可以使用BITXOR来做到这一点:
=BITXOR(12345678,HEX2DEC("FFFFFFFF"))
为您的位长添加更多FF。
答案 1 :(得分:0)
纯Excel公式解决方案有点复杂但可能:
公式:
B1
中的复制到右Q1
:
=RIGHT("0000"&HEX2BIN(MID($A1,COLUMNS($A:A),1)),4)
COLUMNS($A:A)
将计算:1($ A:A),2($ A:B),3($ A:C),... 16($ A:P),具体取决于哪一列它是向右复制的。
因此,MID($A1,COLUMNS($A:A),1)
将从A1
获取一个数字,具体取决于向右复制的列。
HEX2BIN(MID($A1,COLUMNS($A:A),1))
会将那个digti转换为二进制。但它不会返回前导零。因此,例如HEX2BIN("3")
将是“11”而不是“0011”。
但是对于下一步,我们需要4个二进制数字。因此=RIGHT("0000"&HEX2BIN(MID($A1,COLUMNS($A:A),1)),4)
会将这些前导零添加到4个二进制数字。
所以在整个公式中,A1
的每个数字都是4位二进制数。
编辑:HEX2BIN
有第二个参数用于给出数字计数。所以不需要RIGHT("0000"&HEX2BIN(...),4)
=HEX2BIN(MID($A1,COLUMNS($A:A),1),4)
也可以。
B2
中的复制到右Q2
:
=--NOT(--MID(B1,1,1))&--NOT(--MID(B1,2,1))&--NOT(--MID(B1,3,1))&--NOT(--MID(B1,4,1))
此公式将从上面的单元格中取出4位二进制数字的每个数字并取消它。 --
部分(*-1*-1
)是强制从字符串到数字的隐式转换所必需的。
B3
中的复制到右Q3
:
=BIN2HEX(B2)
在A3
:
=B3&C3&D3&E3&F3&G3&H3&I3&J3&K3&L3&M3&N3&O3&P3&Q3
列A
必须格式化为Text
。
在此之后,您可以将行1:3
向下复制到行5:7
中。然后在A5
中输入所需的十六进制。请注意,您必须始终输入16位数字。
从Excel 2013开始,有一个原生BITXOR
功能:https://support.office.com/en-us/Article/BITXOR-function-c81306a1-03f9-4e89-85ac-b86c3cba10e4
所以Mark PM
的解决方案也应该最多使用12个十六进制数字(值最多为16 ^ 12-1 = 2 ^ 48-1)。但我无法尝试,因为我没有Excel 2013。