# byte[] to String Konvertieren



## rachid1981 (6. Jul 2011)

Guten Tag alle zusammen

String str = " dateii verschlüsseln ";
		byte[] test1 = str.getBytes();
		System.out.println("Test 1   :" + test1);

		String test2 = new String(test1);
		System.out.println("Test2   " + test2);

		byte[] test3 = test2.getBytes();
		System.out.println("Test3             " + test3);
Ausgabe:
Test 1   :[B@107077e
Test2    dateii verschlüsseln 
Test3             [B@7ced01

weisst jemand vielleicht wie kann ich den Inhalt von Test1 und Test 3 gleich mache
gehts hier um gleiche String natürlich
Danke im voraus


----------



## Gast2 (6. Jul 2011)

String (Java 2 Platform SE v1.4.2)[]%29
Dann kannst du beide Strings per equals vergleichen.

Alternativ kannst du direkt die beiden byte arrays vergleichen:
Arrays (Java 2 Platform SE 5.0)[],%20byte[]%29


----------



## truesoul (6. Jul 2011)

Na bei Test1 und Test3 gibst du im printlin die referenzen beider Objekte aus.

Ich nehme mal an du willst eine Ausgabe was in Test1 und Test3 steht.


```
String str = " dateii verschlüsseln ";
        byte[] test1 = str.getBytes();
        for(byte a : test1)
            System.out.println("Test3 " + a);
        
        System.out.println("Test 1 :" + test1.toString());

        String test2 = new String(test1);
        System.out.println("Test2 " + test2);

        byte[] test3 = test2.getBytes();
        for(byte a : test3)
            System.out.println("Test3 " + a);
```
Wenn du die beiden vergleichen willst siehe Kommentar über mir


----------



## rachid1981 (6. Jul 2011)

Danke erstmal für deine Antwort
ich will aber das ich gleiche byte[] array habe und das brauche ich für meine Ver/Entschlüsselung
deswegen müssen die gleiche Inhalt haben
Danke


----------



## Gast2 (6. Jul 2011)

Deine beiden Arrays sind gleich, du gibst dir da nich den Inhalt, sondern die String-repräsentation (!= der String den das array repräsentiert) des arrays aus.

Wenn du deine Kopie des Arrays erstellen willst dann kannst du das array auch einfach klonen.


----------



## Landei (6. Jul 2011)

Du must unterscheiden, was "gleich" hier meint:

- Sind test1 und test2 die "gleichen" Arrays? Nein, es sind zwei unterschiedliche Objekte an unterschiedlichen Stellen im Speicher. Deshalb liefert die Standard-[c]toString[/c]-Methode, die für Arrays leider nicht überschrieben ist, auch unterschiedliche Werte (nimm [c]java.util.Arrays.toString(test1);[/c] wenn du eine vernünftige Ausgabe haben willst).
- Haben test1 und und test2 den "gleichen" Inhalt, sind also beide gleich lang und stehen die gleichen Bytes an den gleichen Stellen? Ja, sollten sie, so wie du das machst. Auch hier ist leider die [c]equals[/c]-Methode für Arrays nicht überschreiben, vergleicht also auf Identitäts-Gleichheit, nicht Inhalts-Gleichheit. Wieder gibt es Abhilfe, und zwar [c]java.util.Arrays.equals(test1, test2);[/c]

Beides ist unschön, und z.B. für Collections wie [c]ArrayList[/c] besser gelöst - so wie man es erwarten würde. Arrays bilden nicht nur in dieser Hinsicht eine Ausnahme in Java, und leider muss man diese Besonderheiten kennen, um keine Überraschungen zu erleben.


----------



## rachid1981 (6. Jul 2011)

String str = " dateii verschlüsseln";

		byte[] test1 = str.getBytes();
		test1.clone();
		System.out.println("Test 1   :" + test1);

		String test2 = new String(test1);
		System.out.println("Test2   " + test2);

		byte[] test3 = test2.getBytes();

		System.out.println("Test3             " + test3);

		Assert.assertArrayEquals(test1, test3);
habe das jetzt so gebastelt aber trotzdem geht das nicht 
also ich benutze assertArrayEquals um beide strings zu vergleiche
Danke


----------



## Gast2 (6. Jul 2011)

Was willst du denn genau erreichen? Willst du einfach nur dein byte array kopieren?
Dann reicht doch folgendes:

```
byte[] b1 = "Datei verschlüsseln".getBytes();
		byte[] b2 = Arrays.copyOf(b1, b1.length);
		
		System.out.println(new String(b1));
		System.out.println(new String(b2));
```


----------



## rachid1981 (6. Jul 2011)

Nein das brauche ich nicht aber danke
bei umwandelung müssen die beide byte gleich sind und das brauche für die Ver/Enschlüsselung
und mit test1.toString() gehts leider auch nicht
wenn jemand noch eine Idee hat bitt schön
Danke an euch alle


----------



## Gast2 (6. Jul 2011)

Was meinst du denn mit "gleich"?

Deine Arrays sind gleich, wenn gleich für dich bedeutet dass die einzelnen bytes in deinem array identisch sind.


```
String str = "datei verschlüsseln";

		byte[] test1 = str.getBytes();
		String test2 = new String(test1);
		byte[] test3 = test2.getBytes();
		
		System.out.println("Test1 : " + new String(test1));
		System.out.println("Test2 : " + test2);
		System.out.println("Test3 : " + new String(test3));
		System.out.println(Arrays.equals(test1, test3));
```


----------



## rachid1981 (6. Jul 2011)

also ich vergleiche die 2 byte array und die sind nicht gleich
test1 enthält        [B@107077e
und Test 3 enthält [B@7ced01  habe auch versucht mit codierung und gehts auch nicht
wie zb. str.getByte("UTF8"); und so


----------



## Gastredner (6. Jul 2011)

Die Ausgabe von toString() ist *nicht* der Inhalt des Arrays! Verwende [c]java.util.Arrays.toString(test3)[/c], um dir den *Inhalt* deines Arrays ausgeben zu lassen.
Lies dir am besten Landeis Post nochmals aufmerksam durch.


----------



## rachid1981 (6. Jul 2011)

Danke erstmal
hier ist die ausgabe
Test 1   :[B@8ed465
Test2    dateii 
Test3             [32, 100, 97, 116, 101, 105, 105, 32]
und das ist nicht was ich haben will


----------



## Landei (6. Jul 2011)

Und wenn du das auch für test1 machst, wirst du sehen, dass in beiden das gleiche *drinsteht*. Versuche doch bitte zu verstehen, dass es verschiedene Arten von Gleichheit gibt: Ich habe einen Einkaufswagen mit Ravioli, Löwenbräu und Butterkeksen und du hast einen Einkaufswagen mit Ravioli, Löwenbräu und Butterkeksen. Trotzdem ist es nicht *der gleiche* Einkaufswagen, und nichts anderes passiert hier in Java. Wir haben dir gezeigt, wie man auf Inhaltsgleichheit prüft ([c]java.utl.Arrays.equals(test1, test3)[/c]), dass die beiden Arrays aber trotzdem nicht "identisch" sind. Keine Ahnung, wie ich es noch erklären soll...


----------



## Ariol (6. Jul 2011)

Nur für die Ausgabe (z.B. zum Debuggen):

```
String str = " dateii verschlüsseln ";
		byte[] test1 = str.getBytes();
		StringBuilder sb1=new StringBuilder("0x");
		for(int i = 0; i < test1.length; i++)
			sb1.append(String.format("%02x", test1[i]));
		
		System.out.println("Test1 :" + sb1);

		String test2 = new String(test1);
		System.out.println("Test2 " + test2);

		byte[] test3 = test2.getBytes();
		StringBuilder sb3=new StringBuilder("0x");
		for(int i = 0; i < test3.length; i++)
			sb3.append(String.format("%02x", test3[i]));
		System.out.println("Test3 :" + sb3);
```

Wie das Vergleichen richtig geht hat Landei ja schon geschrieben.


----------

