2009-12-14 7 views
2

Comment convertir un tableau booléen (ou BitSet) en chaîne et vice versa.Convertir boolean [] en String et viceversa en java

Exemple:

boolean[] ar = {true,false,false,false,false}; 
print(BitArrayToString(ar)); 

doit retourner l'une des façons suivantes

10000 //binary 
16 //decimal 
10 //hex, prefered 

Le otherway devrait aussi travailler autour

ar = StringToBitArray(BitArrayToString(ar)); 

Répondre

3
long bitSetInt = 0; 
for (int i = 0 ; i < ar.length ; i++) { 
    bitSetInt = (bitSetInt | toDigit(ar[i])) << 1; 
} 
println(String.format("%x", bitSetInt)); 

int toDigit(boolean b) { return b?1:0;} 

fonctionne tant que le tableau ar est inférieur à la taille d'un long. Utilisez http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html#syntax pour d'autres besoins de mise

+0

belle solution, mais je ne vois pas comment faire l'inverse, la limitation à long taille pourrait devenir un problème – stimpie

+0

parce que ce éperlan Comme les devoirs, je n'ai pas fourni la solution complète - seulement la moitié. avoir un peu de réflexion - il est très facile de convertir un chiffre en un tableau de booléens. (et oui, la taille limite d'un long est en effet un problème, mais la question n'a pas spec la taille maximale ...) – Chii

+0

J'ai résolu le limitation de la taille en exécutant le code pour chaque bloc 64 bits et en concaténant les chaînes. merci pour votre aide – stimpie

2

Eh bien, vous pourriez faire quelque chose comme ceci:

StringBuilder builder = new StringBuilder(); 
for (int i = 0; i < array.length; i++) { 
    if (array[i]) builder.append("1"); else builder.append("0"); 
} 
return builder.toString(); 
+0

cela fonctionne mais utilise beaucoup plus d'espace qu'une solution hexadécimale. – stimpie

Questions connexes