Java中的字符串到二进制输出

我想从一个字符串得到二进制(011001 ..),但我得到[B @ addbf1,必须有一个简单的转换才能做到这一点,但我没有看到它。

public static String toBin(String info){ byte[] infoBin = null; try { infoBin = info.getBytes( "UTF-8" ); System.out.println("infoBin: "+infoBin); } catch (Exception e){ System.out.println(e.toString()); } return infoBin.toString(); } 

在这里我得到infoBin:[B @ addbf1
我想要infoBin:01001 ……

任何帮助将不胜感激,谢谢!

只有Integer有一个转换为二进制字符串表示的方法检查出来:

 import java.io.UnsupportedEncodingException; public class TestBin { public static void main(String[] args) throws UnsupportedEncodingException { byte[] infoBin = null; infoBin = "this is plain text".getBytes("UTF-8"); for (byte b : infoBin) { System.out.println("c:" + (char) b + "-> " + Integer.toBinaryString(b)); } } } 

会打印:

 c:t-> 1110100 c:h-> 1101000 c:i-> 1101001 c:s-> 1110011 c: -> 100000 c:i-> 1101001 c:s-> 1110011 c: -> 100000 c:p-> 1110000 c:l-> 1101100 c:a-> 1100001 c:i-> 1101001 c:n-> 1101110 c: -> 100000 c:t-> 1110100 c:e-> 1100101 c:x-> 1111000 c:t-> 1110100 

填充:

 String bin = Integer.toBinaryString(b); if ( bin.length() < 8 ) bin = "0" + bin; 

数组没有合理的toString重写,因此它们使用默认的对象表示法。

将您的最后一行更改为

 return Arrays.toString(infoBin); 

你会得到预期的输出。

当您尝试在字符串上下文中使用+ ,java编译器会静默地插入对toString()方法的调用。

换句话说,你的陈述是这样的

System.out.println("infobin: " + infoBin.toString())

在这种情况下,它是从Objectinheritance的那个。

您需要使用for循环从字节数组中挑选出每个字节。