java将两个字符串转为十六进制进行异或的结果是多少进制的,怎么做?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java将两个字符串转为十六进制进行异或的结果是多少进制的,怎么做?相关的知识,希望对你有一定的参考价值。

比如字符串,S1和T1
S1="0412134FFFFFFFFFF"
T1="00007770000200"
这两个字符串进行异或,如何进行,得到的结果是多少进制的,把异或的结果转成十六进制的字符串又要怎么做?

小猪,已解答,采纳即可

public class Rectangle

public static void main ( String[] args )

String S1 = "0412134FFFFFFFFFF";
String T1 = "00007770000200";
long si = Long.parseLong (S1, 16);
long ti = Long.parseLong (T1);
long st = si ^ ti;
// 很显然是 十进制 0 ~ 9
// 4693090553043039415
System.out.println (st);
String hex = Long.toHexString (st);
// 412134fe30df34b7
System.out.println (hex);

追问

按照异或的算法,首位0和0异或的结果不是应该是0吗?为什么算出来后结果的第一位是4?还是说内部执行的机制不是这样的?求教,谢谢

追答^:翻转,保留           X ^ 0000 1111 = 10100001  异或,异1    
(不同就1)


进制不同,不可相提并论

追问

同样是字符串转Long进行异或,为什么没有对T1进行16进制转换?这样的结果是41234fe30df34b7
可是对T1也进行16进制转换后,结果却是41234888ffffdff

追答如果没有特殊说明,0打头的是八进制

你的第一个字符串有F,是16进制

你的第二个字符串符合八进制

默认而已

追问

我需要两个字符串都是16进行进行异或,虽然第二个是0打头,这样是为了两个字符串的长度一致。
还有,这样的出来的结果是15位的,而我需要的结果也必须是16位的,使用Long进行异或的话,是因为整形的丢掉了首位的0,我不能再得到的结果前面去拼一个0凑到16,也就是说这样的结果其实是不符合要求的,应该怎么做呢?

追答

如果用你的整形的话,第一个就越界报错了
又不能凑0,那你就格式化你的结果,NumberFormat什么的,如果还不可以,那我也不知道了

参考技术A public String xorHex(String a, String b)
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);


也可以这么写:
String s1 = "426F62";
String s2 = "457665";
int n1 = Integer.parseInt(s1, 16);
int n2 = Integer.parseInt(s2, 16);
int n3 = n1 ^ n2;
String s3 = String.format("%06x", n3);追答

亲,两种算法

记得优先采纳哦

java异或"^"的特性

1,什么是异或

 异或是一种逻辑运算符,使用符号“^”表示,异或就是在对二进制进行操作的过程中,相同的取0,不同的取1。

2,证明a==a^b^b;

关于这个结论读者肯定都知道,其中b^b的结果肯定全是0,然后任何数和0取异或都不会变。所以a==a^b^b是成立的。

3,使用异或的特性互调两个数

如果需要互调整数a和b,那么可以:

int temp=a;
a=b;
b=temp;

也可以使用异或:

a=a^b;
b=a^b;
a=a^b;

 

以上是关于java将两个字符串转为十六进制进行异或的结果是多少进制的,怎么做?的主要内容,如果未能解决你的问题,请参考以下文章

异或运算

京东-2017-异或

剑指offer数组中只出现一次的数

异或的性质与应用

java运算符 与(&)非(~)或(|)异或(^)

java运算符 与(&)非(~)或(|)异或(^)