2009-11-06 5 views
0

ont petit problème, et serions très reconnaissants de l'aide :)octets à chaîne

je convertir tableau d'octets à chaîne et obtenir cette chaîne de sortie: « [0, 0, 0, 0] » Après cela une autre méthode devrait prendre la chaîne en entrée et récupérer le tableau d'octets du premier. Je reçois l'erreur que j'ai l'exception number.format, donc je suppose que je devrais faire la méthode convertToString d'une autre manière. Ce est ce que j'ai jusqu'à présent:

import java.io.ByteArrayOutputStream; 
import java.util.StringTokenizer; 


public class byteToString { 

    public String convertToString(){ 
     byte[] byteArray = new byte[] {91,79,44,32,79,44,32,79,44,32,79,93}; 
     String holder = new String(byteArray); 
     return holder; 

    } 
    /*was told to use this code to convert back*/ 
     private static byte[] toByteArray(String myString){ 
     myString = myString.substring(0, myString.length()- 1).substring(1); 
     ByteArrayOutputStream myStream = new ByteArrayOutputStream(); 
     for (StringTokenizer myTok = new StringTokenizer(myString, ","); myTok.hasMoreTokens();){ 
      myStream.write(Byte.parseByte(myTok.nextToken().trim())); 
     } 
     return myStream.toByteArray(); 

    } 
    public static void main(String[] args){ 
     String myString = new byteToString().convertToString(); 

     toByteArray(myString); 


    } 
} 

Merci d'avance !! :)

+0

Voir 'Arrays.toString (octet [])' http://java.sun.com/javase/6/docs/api/ java/util/Arrays.html # toString (octet []) – McDowell

Répondre

3

new byte[] {91,79,44,32,79,44,32,79,44,32,79,93} est en fait [O, O, O, O] tableau de Oh n'est pas zéro es! À la place, utilisez new byte[] {91,48,44,32,48,44,32,48,44,32,48,93}.

tiens également à noter que vous pouvez utiliser:

myString = myString.substring(1, myString.length() - 1);

au lieu de:

myString = myString.substring(0, myString.length()- 1).substring(1);.

C'est plus efficace.

0
public class AAA { 

    public static final byte[] TEST_DATA = {91, 79, 44, 32, 79, 44, 32, 79, 44, 32, 79, 93}; 

    public String convertToString(byte[] array) { 
     return Arrays.toString(array); 
    } 

    private static byte[] toByteArray(String myString) { 
     ByteArrayOutputStream bOut = new ByteArrayOutputStream(); 
     Pattern pattern = Pattern.compile("\\D*(\\d+)"); 
     Matcher matcher = pattern.matcher(myString); 
     while (matcher.find()) { 
      bOut.write((byte)Integer.parseInt(matcher.group(1))); 
     } 
     return bOut.toByteArray(); 
    } 

    public static void main(String[] args) { 
     String myString = new AAA().convertToString(TEST_DATA); 
     byte[] bytes = toByteArray(myString); 
     System.out.println("Test " + (Arrays.equals(bytes, TEST_DATA) ? "passed" : "failed")); 
    } 
} 
+0

solution élégante, merci! Mais pour une raison quelconque, je suis obligé d'utiliser le code de la méthode toByteArray que j'ai écrit .... – Angela

0

solution simple pour ByteArray à cordes est inférieure à

public class ByteArrayToString { 
      public static void main(String args[]) { 
       byte[] random = new byte[] { 34, 65, 54 , 76, 66, 65, 66, 70, -10 }; 
       String utf = new String(random, "UTF-8"); 
       String cp1252 = new String(random, "Cp1252"); 
       String windows1252 = new String(random, "Windows-1252"); 
       System.out.println("String created from byte `enter code here`array in UTF-8 encoding : "+ utf); 
       System.out.println("byte array to String in Cp1252 encoding : " + cp1252); 
       System.out.println("byte array to String in Windows-1252 encoding : "+ windows1252); 
      } 
     } 
Questions connexes