我有两个字符串
String s1="426F62";
String s2="457665";
Run Code Online (Sandbox Code Playgroud)
字符串以十六进制表示.我想对他们进行异或.通常逐个字符的异或为除了之外的其他人提供正确的结果F XOR 6.(它给出112,答案应该是9)
请告诉我在JAVA中实现它的正确方法
编辑:转换为int和xoring工作.但是当两个字符串长度不同时如何xor.
Jon*_*eet 15
而不是对Unicode表示进行异或,只需将每个字符转换为它以十六进制表示的数字,将其转换为XOR,然后将其转换回十六进制.你仍然可以一次做一个角色:
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);
}
Run Code Online (Sandbox Code Playgroud)
请注意,这应该适用于字符串很长(只要它们的长度相同)并且永远不需要担心负值 - 您将始终只获得对每对字符进行异或的结果.
| 归档时间: |
|
| 查看次数: |
18867 次 |
| 最近记录: |