Chaîne binaire et vice versa: ASCII étendu
Je veux convertir une Chaîne binaire en le mettant dans un tableau d'octets ( String.getBytes[]
), puis magasin de la chaîne binaire pour chaque octet (Integer.toBinaryString(bytearray)
) dans une Chaîne de caractères[]. Ensuite, je veux convertir un retour à la normale de la Chaîne via Byte.parseByte(stringarray[i], 2)
. Cela fonctionne très bien pour le standard ASCII Table, mais pas pour l'étendue. Par exemple, un A
me donne 1000001
, mais un Ä
retourne
11111111111111111111111111000011
11111111111111111111111110000100
Toutes les idées comment gérer cela?
public class BinString {
public static void main(String args[]) {
String s = "ä";
System.out.println(binToString(stringToBin(s)));
}
public static String[] stringToBin(String s) {
System.out.println("Converting: " + s);
byte[] b = s.getBytes();
String[] sa = new String[s.getBytes().length];
for (int i = 0; i < b.length; i++) {
sa[i] = Integer.toBinaryString(b[i] & 0xFF);
}
return sa;
}
public static String binToString(String[] strar) {
byte[] bar = new byte[strar.length];
for (int i = 0; i < strar.length; i++) {
bar[i] = Byte.parseByte(strar[i], 2);
System.out.println(Byte.parseByte(strar[i], 2));
}
String s = new String(bar);
return s;
}
}
Vous devez vous connecter pour publier un commentaire.
Tout d'abord: "ASCII étendu" est un titre trompeur, qui est utilisé pour se référer à une tonne de différents encodages.
Deuxième:
byte
en Java est signé, tout en octets dans les encodages sont généralement considérés comme non signés. Puisque vous utilisezInteger.toBinaryString()
labyte
sera converti enint
à l'aide de l'extension du signe (parce que les valeurs d'octets > 127 seront représentés par des valeurs négatives en Java).Pour éviter cela, utilisez simplement
& 0xFF
pour masquer tous, mais le plus faible de 8 bits comme ceci:bar[i] = (byte)Integer.parseInt(strar[i], 2);
pour backconversion. Merci beaucoup!De s'étendre sur les Joachim du point de sur "ASCII étendu" j'aimerais ajouter...
Noter que
getBytes()
est une opération de transcodage qui convertit les données du format UTF-16 pour la plate-forme de codage par défaut. L'encodage varie d'un système à l'autre et parfois même entre les utilisateurs sur le même PC. Cela signifie que les résultats ne sont pas compatibles sur toutes les plateformes et si un ancien encodage par défaut (comme sur Windows) que les données peuvent être perdues.De faire l'opération symétrique, vous devez fournir un codage explicite (de préférence un encodage Unicode UTF-8 ou UTF-16.)