Java:转换二进制字符串时,字节数组的长度似乎是错误的

Java:转换二进制字符串时,字节数组的长度似乎是错误的,java,arrays,binary,byte,bit,Java,Arrays,Binary,Byte,Bit,我试图对字节数组进行位填充,需要填充的位数是48(所以是6个字节)。下面是二进制字符串: String paddingBinaryString = "100000000000000000000000000000000000000000000000" 但是,这个二进制字符串的字节数组显示长度为7(而不是6!)。将48位二进制字符串转换为字节数组的方法是: byte[] paddingByteArr = new BigInteger(paddingBinaryString, 2).toByteAr

我试图对字节数组进行位填充,需要填充的位数是48(所以是6个字节)。下面是二进制字符串:

String paddingBinaryString = "100000000000000000000000000000000000000000000000"
但是,这个二进制字符串的字节数组显示长度为7(而不是6!)。将48位二进制字符串转换为字节数组的方法是:

byte[] paddingByteArr = new BigInteger(paddingBinaryString, 2).toByteArray();
System.out.println("paddingByteArr.length: " + paddingByteArr.length); //shows 7
肯定有什么明显的错误,因为48位必须是6字节,而不是7字节,对吗?

for
toByteArray

数组将包含表示此BigInteger所需的最小字节数,至少包括一个符号位

该数字为正数,因此必须在开头至少添加一个额外的零,这需要一个完整的额外字节。表示形式是big-endian,因此生成的数组是

00000000 10000000 00000000 00000000 00000000 00000000 00000000 
       ^
       |
       *--- sign bit

所以,如果从原始字符串中删除一个零,它将变成6字节。