Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的字符串到二进制输出_Java_String_Encoding_String Conversion - Fatal编程技术网

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

Java中的字符串到二进制输出,java,string,encoding,string-conversion,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){

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


感谢您的帮助!

当您尝试在字符串上下文中对对象使用
+
时,java编译器会自动插入对toString()方法的调用

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

System.out.println(“infobin:+infobin.toString())

在本例中,它是从对象继承的


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

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

将最后一行更改为

return Arrays.toString(infoBin);

您将获得预期的输出。

只有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;
String bin=Integer.toBinaryString(b);
if(bin.length()<8)
bin=“0”+bin;

看起来您希望打印的是位,而不是字节。您好,Andrzej,您的回答很有道理,但我得到的是[84104105115,32105115,329732,…]而不是(011010…)有什么建议吗?谢谢你也许你的BYTEST需要一些填充谢谢你的帮助!@stacker为什么空间只被赋予6位而不是7位?(ex:c:->100000)我应该在开始时手动添加一个0吗?(ex:(ex:c:->0100000))@Nick这是我第一个评论的意思,前导零被省略了,所以你需要