我正在努力完成一些功课,而且我完全难过了。我需要执行的函数是,给定字符的十六进制值,xor与另一个十六进制值来验证已知的结束值。
给出一个简单的例子(给我的一个),我知道'Bob'的ascii值将是[42,6F,62],而'Eve'将是[45,76,65]。我必须将[07,16,17]的'鲍勃'的价值与“夏娃”进行异或。
我认为xor只是添加模数基础,但只是使用Microsoft计算器:(42 + 45)mod 16 = 3但是42 XOR 45 = 7.我不明白XOR函数将如何完成。有人可以解释一下吗?
提前致谢
我试过
float l = (6F)^(16);
System.out.println(l);
并得到了这个例外:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - bad operand types for binary operator '^'
first type: float
second type: double
at p2p_example.P2P_Example.main(P2P_Example.java:40)
Java Result: 1
答案 0 :(得分:1)
XOR是按位异或 - ,
42 = 1000010
45 = 1000101
7 = 0000111
如果两个位中有一个(并且只有一个)是XORd,那么这是一个。对于Java,您可以使用parseInt并传入基数,例如
public static void main(String[] args) {
int a = Integer.parseInt("42", 16);
int b = Integer.parseInt("45", 16);
System.out.println(Integer.toString(a ^ b, 16));
}
打印
7
答案 1 :(得分:1)
0x42 + 0x45 = 0x87
= 135
135 % 16 = 7 = 0x07
我认为你在十六进制和十进制基数之间感到困惑(尽管(42 + 45)%16也恰好是十进制的7;所以也许你只是把数学做错了?)