Java BigInteger(字符串)和BigInteger(字节[])不相等

Java BigInteger(字符串)和BigInteger(字节[])不相等,java,arrays,byte,biginteger,Java,Arrays,Byte,Biginteger,我希望BigInteger类中的两个构造函数BigIntegerString和BigIntegerbyte[]的行为类似,但它们没有 为什么两个大整数不相等?如何从字节数组创建BigInteger String hex = "94B4"; byte[] b = DatatypeConverter.parseHexBinary(hex); // -108, -76 BigInteger b1 = new BigInteger(hex, 16); //38068 BigInteger b2 = n

我希望BigInteger类中的两个构造函数BigIntegerString和BigIntegerbyte[]的行为类似,但它们没有

为什么两个大整数不相等?如何从字节数组创建BigInteger

String hex = "94B4";
byte[] b = DatatypeConverter.parseHexBinary(hex); // -108, -76

BigInteger b1 = new BigInteger(hex, 16); //38068
BigInteger b2 = new BigInteger(b); //-27468
看起来byte[]构造函数将输入视为常规2的补码数据,而十六进制构造函数将其视为十六进制字符串


使用新的BigInteger符号,byte[]magnity允许您强制值为正数,因此新的BigInteger 1,b将为38068。

38068+27468等于65536并不奇怪

请记住,java.lang.String是字符数组,java中的字符是无符号16位类型。很好

BigInteger b2=新的BigInteger B;绕过这一点。它将数据解释为2的补码有符号16位类型

因此不同