# String to Byte



## El_tom (25. Mrz 2017)

Hallo zusammen,

ich habe folgendes Problem: Wie wandele ich einen String in ein Byte-Array um.
Gegeben ist ein String der Form "00000010" etwa (welcher für 2 steht). 
Meine Frage ist, wie wandele ich das jetzt in ein Byte-Array um. Alle meine bisherigen Versuche sind fehlgeschlagen


----------



## Tobse (25. Mrz 2017)

Was waren denn deine Bisherigen Versuche?

Musst du das selbst schreiben?


----------



## Xyz1 (25. Mrz 2017)

Byte oder bit?


----------



## El_tom (25. Mrz 2017)

Byte


----------



## El_tom (25. Mrz 2017)

Z.b. hab ich Integer.toBinaryString(...) benutzt, aber da liefert er mir falsche Ergebnisse....
Ich muss es irgendwie zum Laufen bekommen


----------



## Tobse (25. Mrz 2017)

Naja, Integer.toBinaryString ist falsch. Warum verstehst du, oder?

Wirf mal einen Blick auf Byte.valueOf(String, int)


----------



## El_tom (25. Mrz 2017)

Ich vermute, weil es kein Integer ist, sonder eine Binärzahl.
Dann müsste es Byte.valueOf("00000010",2) sein?


----------



## Tobse (25. Mrz 2017)

El_tom hat gesagt.:


> Ich vermute, weil es kein Integer ist, sonder eine Binärzahl.



Nein, deswegen nicht. Was sagt dir denn der Methodenname? Ein Blick ins Javadoc hilft _*immer *_weiter:



			
				Javadoc zu Integer.toBinaryString hat gesagt.:
			
		

> public static String toBinaryString(int i)
> 
> Returns a string representation of the integer argument as an unsigned integer in base 2.
> 
> [...]



Es nimmt einen Integer und gibt einen String zurück. Du hast aber einen String und willst einen Byte. Da stimmt was nicht, oder? Auch steht da, dass es die Zahl in einen Binärstring umwandelt. Das ist ja das Gegenteil von dem, was du erreichen willst 

----



> Dann müsste es Byte.valueOf("00000010",2) sein?


Was kommt denn raus, wenn du es ausführst?


----------



## Xyz1 (26. Mrz 2017)

El_tom hat gesagt.:


> Ich muss es irgendwie zum Laufen bekommen


Okay, nur, weil es eilt, und ich kein Tränenvergießen möchte. 


```
public static void main(String[] args) throws IOException {
        String s = "00000010"; // 2
        byte b1 = Byte.parseByte(s, 2);
        byte b2 = 0;
        for (int i = 0; i < 8; i++) {
            b2 |= (s.charAt(7 - i) - '0') << i;
        }
        System.out.println("b1 = " + b1);
        System.out.println("b2 = " + b2);

        String string = "0100001101000011010000110100001101000011"; // 67,...
        byte[] array = new byte[string.length() / 8];
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < 8; j++) {
                array[i] |= (string.charAt(i * 8 + 7 - j) - '0') << j;
            }
        }
        System.out.println(Arrays.toString(array));
    }
```


----------



## Tobse (26. Mrz 2017)

@DerWissende Library-Funktionen sind doch was schönes 


```
byte[] byteAr = new BigInteger("0110011100100000010100111001001000110", 2).toByteArray();
```


----------



## Xyz1 (26. Mrz 2017)

@Tobse : Ok, aber ohne Bibliotheks-funktionen muss man es in der Prüfung auch können - sonst gibt's in der Prüfung die 5.
Das soll kein Vorwurf sein - sondern jeder braucht zwischendurch Beispiele, an den er sich "durchangeln" kann. 
Schönen Sonntag noch.

Bearbeitung: Muss muss mit der 1 als MSB aufpassen, das gibt sonst manchmal komische Ergebnisse.


----------



## krgewb (26. Mrz 2017)

El_tom hat gesagt.:


> Gegeben ist ein String der Form "00000010" etwa (welcher für 2 steht).


Sehen bei dir die Strings immer so aus oder können Sie auch wie folgt aussehen? 
0100001101000011010000110100001101000011


----------



## El_tom (26. Mrz 2017)

Ja die Strings können auch so wie bei dir aussehen.
Super vielen Dank, dann krieg ich das doch noch rechtzeitig fertig


----------

