如何使用Excel以十六进制格式计算按位XOR?

时间:2015-10-09 06:32:51

标签: excel excel-vba hex xor bitwise-xor vba

我有两个带有一串位的单元格:

1747F6001E00DB2XXXXX28FE5257645C

1C6262C8DBF510F655XXXXXA3BDA58AC

我想将两者结合在一起,以便结果类似于0B2594C8C5F5CXXXXX190014698D3CF0

我知道我需要在Excel中使用按位XOR运算,因为按位XOR计算器在线工作,但它们让我可以选择十六进制和二进制输入数据。 BITXOR应该工作,但它不适用于十六进制输入。

2 个答案:

答案 0 :(得分:1)

两个等长的十六进制字符串的方法。

Sub approach()

 s1 = "1747F6001E00DB266F5728FE5257645C"
 s2 = "1C6262C8DBF510F6554E28EA3BDA58AC"

 If Len(s1) <> Len(s2) Then Exit Sub

 sRes = ""
 For i = 1 To Len(s1)
  vRes = Val("&H" & Mid(s1, i, 1)) Xor Val("&H" & Mid(s2, i, 1))
  sRes = sRes & Hex(vRes)
 Next

 Debug.Print sRes

End Sub

对两个十六进制值的每个数字进行异或运算,因为不需要进位,因为它不是一个加法。

顺便说一下。 BITXOR最多只能工作2 ^ 48-1。您的值范围最大为16 ^ 32-1。

答案 1 :(得分:1)

使用公式,文本到列固定宽度每个字符分开(比如A1:AF1和A2:AF2):

=DEC2HEX(BITXOR(HEX2DEC(A1),HEX2DEC(A2)))  

复制到西装。如果需要将CONCATENATE作为单个单元格中的字符串拼接(或复制到Word并替换所有选项卡,^t,则无需拼接)。

不幸的是,直到Excel 2011 / Excel 2013才引入BITXOR。

SO33031399 example