【问题标题】:String to binary output in JavaJava中的字符串到二进制输出
【发布时间】:2011-05-09 14:32:38
【问题描述】:

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


【解决方案1】:

只有整数有转换为二进制字符串表示的方法,看看这个:

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;

【讨论】:

  • 也许你的字节需要一些填充
  • 非常感谢您的帮助!
  • @stacker 为什么空格只在 6 位而不是 7 位上结束? (例如:c: -> 100000)
  • 我应该在开头手动添加一个 0 吗? (例如:(例如:c:-> 0100000))
  • @Nick 这就是我的第一条评论的意思,前导零被省略了,所以你需要
【解决方案2】:

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

将最后一行更改为

return Arrays.toString(infoBin);

你会得到预期的输出。

【讨论】:

  • 嗨 Andrzej,你的回答很有道理,但我得到 [84, 104, 105, 115, 32, 105, 115, 32, 97, 32,..] 而不是 (01101010. ..) 有什么建议?谢谢
【解决方案3】:

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

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

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

在这种情况下,它是从 Object 继承的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 2014-07-15
    • 2012-11-20
    • 2014-04-28
    • 1970-01-01
    • 2016-07-25
    相关资源
    最近更新 更多