web-dev-qa-db-ja.com

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.。

助けていただければ幸いです、ありがとう!

10
Nick

整数のみがバイナリ文字列表現に変換するメソッドを持っていますこれをチェックしてください:

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;
18
stacker

配列には適切なtoStringオーバーライドがないため、デフォルトのオブジェクト表記を使用します。

最後の行をに変更します

return Arrays.toString(infoBin);

期待どおりの出力が得られます。

4
Andrzej Doyle

文字列コンテキストのオブジェクトで_+_を使用しようとすると、JavaコンパイラはtoString()メソッドへの呼び出しをサイレントに挿入します。

言い換えれば、あなたのステートメントは次のようになります

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

この場合、これはObjectから継承されたものです。

バイト配列から各バイトを選択するには、forループを使用する必要があります。