提问者:小点点

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


例如,字节B中的位是10000010,我如何将位分配给字符串str字面意思,即str="10000010"

编辑

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

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

(b)如果bits以0开头,则输出忽略0,例如,假设B[0]有00000001,输出为1而不是00000001


共3个答案

匿名用户

使用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

DEMO。

匿名用户

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

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

0xFF是255,或11111111(无符号字节的最大值)。0x100是256,或100000000

的<代码>

我把它和若昂·席尔瓦的回答进行了比较,这快了10倍多。http://ideone.com/22DDK1我没有包括普舍莫的回答,因为它没有正确填充。

匿名用户

这就是你要找的吗?

从字符串转换为字节

byte b = (byte)(int)Integer.valueOf("10000010", 2);
System.out.println(b);// output -> -126

从字节转换为字符串

System.out.println(Integer.toBinaryString((b+256)%256));// output -> "10000010"

或者正如João Silva在他的评论中所说的添加前导0我们可以将字符串格式化为长度8并将生成的前导空格替换为零,所以对于像"1010"这样的字符串,我们将得到"00001010"

System.out.println(String.format("%8s", Integer.toBinaryString((b + 256) % 256))
                         .replace(' ', '0'));