web-dev-qa-db-ja.com

文字列(testing123など)をバイナリ入力に変換Java

String(単語/文字)をバイナリなどの他の形式に変換できるようにしたいと思います。これをどうやってやろうか。 BLUEJ(Java)でコーディングしています。ありがとう

41
Keith

通常の方法は、String#getBytes()を使用して基礎となるバイトを取得し、それらのバイトを他の形式(16進数、バイナリ形式)で表示することです。

getBytes()はデフォルトの文字セットを使用するため、文字列を特定の文字エンコーディングに変換する場合は、代わりにgetBytes(String encoding)を使用する必要がありますが、多くの場合(ASCIIを扱う場合はesp)getBytes()で十分です(チェック済み例外をスローしないという利点があります)。

特定のバイナリへの変換の例を次に示します。

  String s = "foo";
  byte[] bytes = s.getBytes();
  StringBuilder binary = new StringBuilder();
  for (byte b : bytes)
  {
     int val = b;
     for (int i = 0; i < 8; i++)
     {
        binary.append((val & 128) == 0 ? 0 : 1);
        val <<= 1;
     }
     binary.append(' ');
  }
  System.out.println("'" + s + "' to binary: " + binary);

この例を実行すると、次の結果が得られます。

'foo' to binary: 01100110 01101111 01101111 
73
Nuoji

より短い例

private static final Charset UTF_8 = Charset.forName("UTF-8");

String text = "Hello World!";
byte[] bytes = text.getBytes(UTF_8);
System.out.println("bytes= "+Arrays.toString(bytes));
System.out.println("text again= "+new String(bytes, UTF_8));

プリント

bytes= [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]
text again= Hello World!
9
Peter Lawrey

JavaのStringは、その getBytes(Charset) メソッドで「バイナリ」に変換できます。

byte[] encoded = "こんにちは、世界!".getBytes(StandardCharsets.UTF_8);

このメソッドの引数は「文字エンコード」です。これは、文字と一連のバイトの間の標準マッピングです。多くの場合、各文字は1バイトにエンコードされますが、すべての言語のすべての文字を表すための十分な一意のバイト値がありません。他のエンコードは複数バイトを使用するため、より広い範囲の文字を処理できます。

通常、使用するエンコーディングは、実装する標準またはプロトコルによって指定されます。独自のインターフェイスを作成していて、選択の自由がある場合、「UTF-8」は簡単で安全な、広くサポートされているエンコーディングです。

  • 簡単です。各メッセージのエンコードを記録する何らかの方法を含めるのではなく、デフォルトでUTF-8に設定できるためです。
  • UTF-8は、Java文字列で使用できる文字any文字をエンコードできるため、安全です。
  • これは、あらゆるJava実装、J2MEに至るまでの実装に必要な少数の文字エンコードの1つであるため、広くサポートされています。他のほとんどのプラットフォームもサポートしています。 XMLのような標準でデフォルトとして使用されます。
6
erickson

ここに私の解決策があります。その利点は次のとおりです。わかりやすいコードで、すべてのキャラクターで機能します。楽しい。

ソリューション1:

public static void main(String[] args) {

    String str = "CC%";
    String result = "";
    char[] messChar = str.toCharArray();

    for (int i = 0; i < messChar.length; i++) {
        result += Integer.toBinaryString(messChar[i]) + " ";
    }

    System.out.println(result);
}

プリント:

1000011 1000011 100101

ソリューション2:

文字あたりの表示ビット数を選択する可能性。

public static String toBinary(String str, int bits) {
    String result = "";
    String tmpStr;
    int tmpInt;
    char[] messChar = str.toCharArray();

    for (int i = 0; i < messChar.length; i++) {
        tmpStr = Integer.toBinaryString(messChar[i]);
        tmpInt = tmpStr.length();
        if(tmpInt != bits) {
            tmpInt = bits - tmpInt;
            if (tmpInt == bits) {
                result += tmpStr;
            } else if (tmpInt > 0) {
                for (int j = 0; j < tmpInt; j++) {
                    result += "0";
                }
                result += tmpStr;
            } else {
                System.err.println("argument 'bits' is too small");
            }
        } else {
            result += tmpStr;
        }
        result += " "; // separator
    }

    return result;
}

public static void main(String args[]) {
    System.out.println(toBinary("CC%", 8));
}

プリント:

01000011 01000011 00100101
4
Jay Remy

これが私の実装です。

public class Test {
    public String toBinary(String text) {
        StringBuilder sb = new StringBuilder();

        for (char character : text.toCharArray()) {
            sb.append(Integer.toBinaryString(character) + "\n");
        }

        return sb.toString();

    }
}
2
       int no=44;
             String bNo=Integer.toString(no,2);//binary output 101100
             String oNo=Integer.toString(no,8);//Oct output 54
             String hNo=Integer.toString(no,16);//Hex output 2C

              String bNo1= Integer.toBinaryString(no);//binary output 101100
              String  oNo1=Integer.toOctalString(no);//Oct output 54
              String  hNo1=Integer.toHexString(no);//Hex output 2C

              String sBNo="101100";
              no=Integer.parseInt(sBNo,2);//binary to int output 44

              String sONo="54";
              no=Integer.parseInt(sONo,8);//oct to int  output 44

              String sHNo="2C";
              no=Integer.parseInt(sHNo,16);//hex to int output 44
2

ここで見つけた答えをいじりながら慣れていくうちに、Nuojiのソリューションを少しひねって、将来それを見てより早く理解できるようにしました。

public static String stringToBinary(String str, boolean pad ) {
    byte[] bytes = str.getBytes();
    StringBuilder binary = new StringBuilder();
    for (byte b : bytes)
    {
       binary.append(Integer.toBinaryString((int) b));
       if(pad) { binary.append(' '); }
    }
    return binary.toString();        
}
1
Barry H.
import Java.lang.*;
import Java.io.*;
class d2b
{
  public static void main(String args[]) throws IOException{
  BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
  System.out.println("Enter the decimal value:");
  String h = b.readLine();
  int k = Integer.parseInt(h);  
  String out = Integer.toBinaryString(k);
  System.out.println("Binary: " + out);
  }
}   
1
janu