public static String byteToHexString(byte[] arr) { StringBuffer sb = new StringBuffer(arr.length * 2); sb.append("00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 text\n"); sb.append("-------------------------------------------------------\n"); for (int i = 0; i < arr.length; i++) { String hex = Integer.toHexString(0xFF & arr[i]).toUpperCase(); if (hex.length() == 1) { hex = "0" + hex; } sb.append(hex).append(' '); if ((i + 1) % 16 == 0) { //TODO sb.append('\n'); } } sb.append('\n'); return sb.toString(); }
测试:
import java.math.BigInteger; import java.util.BitSet; /** * 测试bitset 的异或操作能不能正确的的看出两个bigInteger的bit 位之间的差异 * @author leo * */ public class TestBitSetAndBigInteger { /** * @param args */ public static void main(String[] args) { BigInteger i1 = new BigInteger("1020"); BigInteger i2 = new BigInteger("1021"); BigInteger i3 = new BigInteger("10131036798906733839"); BigInteger i4 = new BigInteger("10131036798906734863");//i3 + 1024 BitSet s1 = BitSet.valueOf(i1.toByteArray()); BitSet s2 = BitSet.valueOf(i2.toByteArray()); BitSet s3 = BitSet.valueOf(i3.toByteArray()); BitSet s4 = BitSet.valueOf(i4.toByteArray()); System.out.println("i1:::::\n" + Utils.byteToHexString(i1.toByteArray())); System.out.println("s1:::::\n" + Utils.byteToHexString(s1.toByteArray())); System.out.println("i2:::::\n" + Utils.byteToHexString(i2.toByteArray())); System.out.println("s2:::::\n" + Utils.byteToHexString(s2.toByteArray())); System.out.println("i3:::::\n" + Utils.byteToHexString(i3.toByteArray())); System.out.println("s3:::::\n" + Utils.byteToHexString(s3.toByteArray())); System.out.println("i4:::::\n" + Utils.byteToHexString(i4.toByteArray())); System.out.println("s4:::::\n" + Utils.byteToHexString(s4.toByteArray())); BitSet s11 = (BitSet) s1.clone(); s11.xor(s2); BitSet s22 = (BitSet) s2.clone(); s22.xor(s1); System.out.println("s1 xor s2 = " + s11.cardinality()); System.out.println("s2 xor s1 = " + s22.c
i1::::: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 text ------------------------------------------------------- 03 FC s1::::: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 text ------------------------------------------------------- 03 FC i2::::: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 text ------------------------------------------------------- 03 FD s2::::: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 text ------------------------------------------------------- 03 FD i3::::: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 text ------------------------------------------------------- 00 8C 98 AC 4A C5 3F 15 0F s3::::: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 text ------------------------------------------------------- 00 8C 98 AC 4A C5 3F 15 0F i4::::: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 text ------------------------------------------------------- 00 8C 98 AC 4A C5 3F 19 0F s4::::: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 text ------------------------------------------------------- 00 8C 98 AC 4A C5 3F 19 0F s1 xor s2 = 1 s2 xor s1 = 1 s3 xor s4 = 2 s4 xor s3 = 2