如何将字节转换为其二进制字符串表示形式

2022-08-31 09:32:37

例如,字节中的位是 ,我如何从字面上将位分配给字符串,即 。B10000010strstr = "10000010"

编辑

我从二进制文件中读取字节,并将其存储在字节数组中。我使用.问题是BSystem.out.println(Integer.toBinaryString(B[i]))

(a) 当位以(最左边)1 开头时,输出不正确,因为它转换为负整数值。B[i]

(b)如果位以开头,则输出忽略,例如,假设有00000001,则输出代替00B[0]100000001


答案 1

使用 Integer#toBinaryString()

byte b1 = (byte) 129;
String s1 = String.format("%8s", Integer.toBinaryString(b1 & 0xFF)).replace(' ', '0');
System.out.println(s1); // 10000001

byte b2 = (byte) 2;
String s2 = String.format("%8s", Integer.toBinaryString(b2 & 0xFF)).replace(' ', '0');
System.out.println(s2); // 00000010

演示


答案 2

我用了这个。与其他答案类似的想法,但没有在任何地方看到确切的方法:)

System.out.println(Integer.toBinaryString((b & 0xFF) + 0x100).substring(1));

0xFF为 255,或(无符号字节的最大值)。 为 256,或111111110x100100000000

将字节上调为整数。在这一点上,它可以是从 - ( 到 ,我排除了前导 24 位)。 并确保将有前导零。&02550000000011111111+ 0x100.substring(1)

若昂·席尔瓦的回答相比,我计时了,这快了10倍多。http://ideone.com/22DDK1我没有包括Pshemo的答案,因为它没有正确填充。