web-dev-qa-db-fra.com

Convertir une chaîne (comme testing123) en entrée binaire Java

J'aimerais pouvoir convertir une chaîne (avec des mots/lettres) en d'autres formes, comme binaire. Comment pourrais-je procéder? Je code en BLUEJ (Java). Merci

41
Keith

La manière habituelle est d'utiliser String#getBytes() pour obtenir les octets sous-jacents, puis de présenter ces octets sous une autre forme (hexadécimale, binaire).

Notez que getBytes() utilise le jeu de caractères par défaut, donc si vous voulez que la chaîne soit convertie en un codage de caractères spécifique, vous devez utiliser getBytes(String encoding) à la place, mais plusieurs fois (surtout lorsque vous utilisez ASCII) getBytes() suffit (et a l'avantage de ne pas lever d'exception vérifiée).

Pour une conversion spécifique en binaire, voici un exemple:

  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);

L'exécution de cet exemple donnera:

'foo' to binary: 01100110 01101111 01101111 
73
Nuoji

Un exemple plus court

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));

impressions

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

Un String in Java peut être converti en "binaire" avec sa méthode getBytes(Charset) .

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

L'argument de cette méthode est un "encodage de caractères"; il s'agit d'un mappage normalisé entre un caractère et une séquence d'octets. Souvent, chaque caractère est codé sur un seul octet, mais il n'y a pas suffisamment de valeurs d'octets uniques pour représenter chaque caractère dans chaque langue. D'autres encodages utilisent plusieurs octets, de sorte qu'ils peuvent gérer une plus large gamme de caractères.

Habituellement, l'encodage à utiliser sera spécifié par une norme ou un protocole que vous implémentez. Si vous créez votre propre interface et avez la liberté de choisir, "UTF-8" est un encodage facile, sûr et largement pris en charge.

  • C'est facile, car plutôt que d'inclure un moyen de noter l'encodage de chaque message, vous pouvez utiliser par défaut UTF-8.
  • C'est sûr, car UTF-8 peut encoder tout caractère qui peut être utilisé dans une chaîne de caractères Java Java.
  • Il est largement pris en charge, car il fait partie d'une petite poignée d'encodages de caractères qui doivent être présents dans toute implémentation de Java, jusqu'à J2ME. La plupart des autres plates-formes le prennent également en charge, et il est utilisé par défaut dans des normes comme XML.
6
erickson

Voici mes solutions. Leurs avantages sont: un code facile à comprendre, fonctionne pour tous les personnages. Prendre plaisir.

Solution 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);
}

impressions:

1000011 1000011 100101

Solution 2:

Possibilité de choisir le nombre de bits affichés par caractère.

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));
}

impressions:

01000011 01000011 00100101
4
Jay Remy

Ceci est ma mise en œuvre.

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
Nicholas Strydom
       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
pruthwiraj.kadam

En jouant avec les réponses que j'ai trouvées ici pour me familiariser avec elle, j'ai tordu un peu la solution de Nuoji afin de pouvoir la comprendre plus rapidement en la regardant à l'avenir.

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