gpt4 book ai didi

java - 比较两个十六进制字符串以查找匹配位数

转载 作者:行者123 更新时间:2023-11-30 01:16:36 25 4
gpt4 key购买 nike

我有两个十六进制字符串:

string x = "928fe46f228555621c7f42f3664530f9";
string y = "56cd8c4852cf24b1182300df2448743a";

我正在尝试将它们转换为二进制以查找两个十六进制字符串之间有多少位匹配。

我使用这个函数将十六进制转换为二进制:

 string GetBinaryStringFromHexString (string sHex)
{
string sReturn = "";
for (int i = 0; i < sHex.length (); ++i)
{
switch (sHex [i])
{
case '0': sReturn.append ("0000"); break;
case '1': sReturn.append ("0001"); break;
case '2': sReturn.append ("0010"); break;
case '3': sReturn.append ("0011"); break;
case '4': sReturn.append ("0100"); break;
case '5': sReturn.append ("0101"); break;
case '6': sReturn.append ("0110"); break;
case '7': sReturn.append ("0111"); break;
case '8': sReturn.append ("1000"); break;
case '9': sReturn.append ("1001"); break;
case 'a': sReturn.append ("1010"); break;
case 'b': sReturn.append ("1011"); break;
case 'c': sReturn.append ("1100"); break;
case 'd': sReturn.append ("1101"); break;
case 'e': sReturn.append ("1110"); break;
case 'f': sReturn.append ("1111"); break;
}
}
return sReturn;
}

所以字符串 x 的二进制形式是-->10010010100011111110010001101111001000101000010101010101011000100001110001111111010001011110011011001100100010100110000111

11

二进制字符串 y 是 --> 010101101100110110001100010010000101001011001111001001001011000100011000001000110000000011011111001001000101010101010

但现在我卡住了,我怎样才能对两个字符串进行异或以找到匹配位数?我该如何计算它们?

不管我用的是Java还是C++,谁能帮忙

谢谢,

最佳答案

在 Java 中这很容易。

public static int numberOfMatchingOnes(String a, String b) {
BigInteger aNumber = new BigInteger(a, 16);
BigInteger bNumber = new BigInteger(b, 16);

return aNumber.xor(bNumber).bitCount();
}

在 C++ 中,您可能会使用位集。你要找的是 Hamming weight .

如果你真的想不使用 BigInteger:取两个字符串的 4 个字符,将它们转换成一个 int,对它们进行异或并计算一位。重复直到字符串结束。

public static int numberOfMatchingOnes(String a, String b) {
if (a.length() != b.length() || a.length() % 4 != 0) {
throw new IllegalArgumentException("invalid strings");
}

int totalCount = 0;
for (int i = (a.length()-1)/4; i >= 0; i--) {
int aValue = Integer.valueOf(a.substring(i * 4, i * 4 + 4), 16);
int bValue = Integer.valueOf(b.substring(i * 4, i * 4 + 4), 16);
totalCount += Integer.bitCount(aValue ^ bValue);
}
return totalCount;
}

你可以看看Java Sourcecode查看 bitCount() 的工作原理。

关于java - 比较两个十六进制字符串以查找匹配位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26286901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com