是否有一种简单的方法可以将byte[]
数组(零和1,基本上是每个位转换为ascii'1'或ascii'0')打印到控制台?
答案 0 :(得分:7)
您可以通过将其数值转换为基数2来输出单个字节。以下是两种方法。在两者中,我将使用这个字节数组:
byte[] array = "HälLø123§$%".getBytes();
for(final byte b : array){
System.out.print(Integer.toString(b & 0xFF /* thx Jason Day */, 2));
}
<强>输出:强>
10010001100001110100100110110010011001100001110111000110001011001001100110110000101010011110010001001010
<强>参考:强>
如果要整个阵列输出,请使用BigInteger
:
System.out.println(new BigInteger(array).toString(2));
<强>输出:强>
100100011000011101001000110110001001100110000111011100000110001001100100011001111000010101001110010010000100101
<强>参考:强>
答案 1 :(得分:3)
您可以使用commons-codec BinaryCodec
:
BinaryCodec.toAsciiString(array)
为了更好地控制输出,您可以使用toAsciiChars(..)
并打印char[]
。
(如果您只想输出数组值 - java.util.Arrays.toString(array)
);
答案 2 :(得分:3)
如果要打印每个元素的二进制表示,可以执行以下操作:
StringBuilder sb = new StringBuilder();
sb.append("[");
String comma = "";
for (byte b : array) {
int i = b & 0xFF; // cast to int and mask the sign bit
sb.append(comma);
comma = ",";
sb.append(Integer.toBinaryString(i));
}
sb.append("]");
System.out.println(sb.toString());
答案 3 :(得分:2)
注意:这会输出单个字节,而不是单个位。但是因为它可能对某人有用,我会把它放在这里。
这是我理解问题的解决方案:
byte[] data = {0, 1, 0, 1, 1, 0};
StringBuilder sb = new StringBuilder(data.length);
for(byte b : data) {
sb.append(b);
}
System.out.println(sb);
这应输出010110
。