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

时间:2010-11-13 18:03:27

标签: java string encoding string-conversion

我想从字符串中获取二进制(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 ......

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

3 个答案:

答案 0 :(得分:18)

只有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;

答案 1 :(得分:4)

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

将您的最后一行更改为

return Arrays.toString(infoBin);

你将获得预期的输出。

答案 2 :(得分:1)

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

换句话说,你的陈述看起来像是

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

在这种情况下是从Object继承的那个。

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