Java通过XOR 2字节创建一个字节

6 java arrays byte bytearray xor

我有2个字节的数组,每个包含4个字节(byte1 [],byte2 []),我想对它们进行异或,以创建一个新的4字节数组(byte3 []),我该怎么做?

(或者甚至一次执行每个字节然后将它们放入新数组中)

cyb*_*onk 12

您需要将它们转换为整数(无丢失,原始扩展),执行XOR,然后使用位掩码将结果int转换回字节.

// convert to ints and xor
int one = (int)byte1[0];
int two = (int)byte2[0];
int xor = one ^ two;

// convert back to byte
byte b = (byte)(0xff & xor);
Run Code Online (Sandbox Code Playgroud)

String a        = "10101010";
String b        = "01010101";
String expected = "11111111";  // expected result of a ^ b

int aInt = Integer.parseInt(a, 2);
int bInt = Integer.parseInt(b, 2);
int xorInt = Integer.parseInt(expected, 2);

byte aByte = (byte)aInt;
byte bByte = (byte)bInt;
byte xorByte = (byte)xorInt;

// conversion routine compacted into single line
byte xor = (byte)(0xff & ((int)aByte) ^ ((int)bByte));


System.out.println(xorInt + "   // 11111111  as integer");
System.out.println(xorByte + "    // 11111111  as byte");

System.out.println(aInt + "   // a as integer");
System.out.println(bInt + "    // b as integer");
System.out.println((aInt ^ bInt) + "   // a ^ b as integers");

System.out.println(aByte + "   // a as byte");
System.out.println(bByte + "    // b as byte");

System.out.println(xor + "    // a ^ b as bytes");
Run Code Online (Sandbox Code Playgroud)

打印以下输出

255   // 11111111  as integer
-1    // 11111111  as byte

170   // a as integer
85    // b as integer
255   // a ^ b as integers

-86   // a as byte
85    // b as byte
-1    // a ^ b as bytes
Run Code Online (Sandbox Code Playgroud)


Die*_*sch 6

您可以在字节上使用xor操作.它是插入符号(^).

例:

byte3[0] = (byte) (byte1[0] ^ byte2[0]);
Run Code Online (Sandbox Code Playgroud)

  • 这不会编译,但很容易修复. (5认同)