例如,一个字节B中的位是10000010,如何将字符串分配给字符串str,即str = "10000010".
编辑
我从二进制文件中读取字节,并存储在字节数组中B.我用System.out.println(Integer.toBinaryString(B[i])).问题是
(a)当位以(最左边)1开始时,输出不正确,因为它转换B[i]为负的int值.
(b)如果位开头0,则输出忽略0,例如,假设B[0]为00000001,1而不是输出00000001
Joã*_*lva 159
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
Run Code Online (Sandbox Code Playgroud)
演示.
Rae*_*kye 27
我用过这个.与其他答案类似的想法,但没有看到任何地方的确切方法:)
System.out.println(Integer.toBinaryString((b & 0xFF) + 0x100).substring(1));
Run Code Online (Sandbox Code Playgroud)
0xFF是255,或11111111(无符号字节的最大值).
0x100是256,或100000000
将&字节向上转换为整数.那时,它可以是0- 255(00000000到11111111,我排除了前24位).+ 0x100并.substring(1)确保会有前导零.
我和JoãoSilva的回答相比,这个时间要快10倍.http://ideone.com/22DDK1我没有包含Pshemo的答案,因为它没有正确填充.
这是你想要的?
从String转换为byte
byte b = (byte)(int)Integer.valueOf("10000010", 2);
System.out.println(b);// output -> -126
Run Code Online (Sandbox Code Playgroud)
从byte转换为String
System.out.println(Integer.toBinaryString((b+256)%256));// output -> "10000010"
Run Code Online (Sandbox Code Playgroud)
或者正如JoãoSilva在他的评论中所说的那样添加前导0我们可以将字符串格式化为长度8并将结果前导空格替换为零,所以在字符串的情况下" 1010"我们会得到"00001010"
System.out.println(String.format("%8s", Integer.toBinaryString((b + 256) % 256))
.replace(' ', '0'));
Run Code Online (Sandbox Code Playgroud)
小智 6
您可以检查字节上的每一位,然后将 0 或 1 附加到字符串。这是我为测试编写的一个小助手方法:
public static String byteToString(byte b) {
byte[] masks = { -128, 64, 32, 16, 8, 4, 2, 1 };
StringBuilder builder = new StringBuilder();
for (byte m : masks) {
if ((b & m) == m) {
builder.append('1');
} else {
builder.append('0');
}
}
return builder.toString();
}
Run Code Online (Sandbox Code Playgroud)
获取字节的每一位并转换为字符串。假设字节有 8 位,我们可以通过位移动来一一获取。例如,我们将字节6位的第二位向右移动,8位位的最后的第二位,然后和(&)用0x0001清除前面的位。
public static String getByteBinaryString(byte b) {
StringBuilder sb = new StringBuilder();
for (int i = 7; i >= 0; --i) {
sb.append(b >>> i & 1);
}
return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
167610 次 |
| 最近记录: |