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
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
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!
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.
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
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();
}
}
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
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();
}
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);
}
}