例如,字节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
使用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'));