Xcode 在Swift中计算2个十六进制值中相同位的程序

Xcode 在Swift中计算2个十六进制值中相同位的程序,xcode,swift,binary,hex,converter,Xcode,Swift,Binary,Hex,Converter,我不熟悉Swift编程,我的任务是创建一个程序,该程序将返回两个十六进制值中相同的位。我写了这样的东西: let str = "8ef4b5013e183e12eab15dc28eb3de29" var hexAr = Array(str) let str2 = "b19d3fa46038d6bd1d7ae5e915fb68b3" var hex2Ar = Array(str2) let result = 0 for i in hexAr { //conversion to binary.

我不熟悉Swift编程,我的任务是创建一个程序,该程序将返回两个十六进制值中相同的位。我写了这样的东西:

let str = "8ef4b5013e183e12eab15dc28eb3de29"
var hexAr = Array(str)
let str2 = "b19d3fa46038d6bd1d7ae5e915fb68b3"
var hex2Ar = Array(str2)
let result = 0

for i in hexAr {
  //conversion to binary...
  for i in binAr {
   if binAr[i] == bin2Ar[i]
    {result++}
  }
}
现在,我发现了一种方法,可以将十六进制值转换为二进制表示的数组:

let hexValue = 0x5
let bin = String(hexValue, radix:2) //output: 101
let binArray = Array(bin) // output: [1,0,1]
上述方法的问题是它返回101,而不是0101,我需要比较两个十六进制值中相同的位。然后,比较5(0101)和D(1101),结果将增加3


感谢您的帮助:)

您不必遍历所有位,只需对两个值进行逻辑运算,然后计算结果的
1
位。@zisoft:您可能是指XOR?@MartinR:进一步考虑一下。。。相同位表示两个位都是
1
或两个位都是
0
。这确实不能由和解决。通过XOR也不是。。。有两种比较是必需的:首先对两个值进行和运算,然后对两个值进行反运算,然后再进行和运算。@zisoft:不,只需要XOR,然后计算0位。@MartinR:明白了,你说得对!