我有两个字符串
String s1="426F62";
String s2="457665";
字符串以十六进制表示。我想对它们进行异或。通常逐个字符进行异或运算会为除 F XOR 6
之外的其他人提供正确的结果。(它给出 112,答案应该是 9)
请告诉我在JAVA中的正确实现方式
编辑:转换为 int 和 xoring 有效。但是当两个字符串的长度不同时如何异或。
最佳答案
与其对 Unicode 表示进行异或运算,只需将每个字符转换为它所代表的十六进制数字,对这些进行异或运算,然后再将其转换回十六进制。你仍然可以一次做一个字符:
public String xorHex(String a, String b) {
// TODO: Validation
char[] chars = new char[a.length()];
for (int i = 0; i < chars.length; i++) {
chars[i] = toHex(fromHex(a.charAt(i)) ^ fromHex(b.charAt(i)));
}
return new String(chars);
}
private static int fromHex(char c) {
if (c >= '0' && c <= '9') {
return c - '0';
}
if (c >= 'A' && c <= 'F') {
return c - 'A' + 10;
}
if (c >= 'a' && c <= 'f') {
return c - 'a' + 10;
}
throw new IllegalArgumentException();
}
private char toHex(int nybble) {
if (nybble < 0 || nybble > 15) {
throw new IllegalArgumentException();
}
return "0123456789ABCDEF".charAt(nybble);
}
请注意,无论字符串有多长(只要它们的长度相同),这都应该有效,并且永远不需要担心负值 - 您总是会得到每对字符的异或结果。
关于java - JAVA中不同长度的XOR Hex String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9840675/