# datentyp in binär umwandeln



## Buckwild (22. Jun 2012)

Hallo zusammen,

ich bin auf der suche nach einer, wie soll ich sagen, besseren? Lösung für ein problem. wobei mir ein wink auch ausreicht falls ich ihn verstehe : )

ich möchte den binärcode von datentypen (hier strings) erzeugen, um bitfolgen abgreifen zu können. sagen wir ich habe 4 strings deren binärcode ich für eine spätere bearbeitung zusammenfassen will.
meine methode die ich geschrieben habe funktioniert einwandfrei. es stellt sich mir nur die frage ob der ganze aufwand wirklich nötig ist? 

mein code:

```
public static String getBits(){
		
		String s[] = {"1","8","128","255"};
		
		StringBuffer sb = new StringBuffer();
		
                          // Auswahl der einzelnen strings
		for(int i = 0; i < s.length; i++){
			String onebyte = s[i];
			
			// String -> Dec
			int y = Integer.parseInt(onebyte);

			// Dec -> binaryString
			String bytestring = Integer.toBinaryString(y);
				
			// Den String mit führenden Nullen auffüllen 
			if(bytestring.length() < 8){
				for(int j = 0; j < 8 - bytestring.length(); j++)
					sb.append("0");
				sb.append(bytestring);
			} else if (bytestring.length() == 8)
				sb.append(bytestring);
		}
		return sb.toString();
	}
```

den erzeugten string kann ich letztendlich mit "charAt()" bearbeiten wie ich möchte. 

aber.. ich frage noch einmal.. ist dieser aufwand (typumwandlungen, führende nullen erzeugen) wirklich nötig um einen binärcode zu erhalten??


----------



## Kr0e (22. Jun 2012)

1te Frage: Wieso nimmst du einen String ?

Nimm doch lieber ein boolean[] als Returntype. Das ergibt vom Kontext her mehr Sinn.

2. Mit dem toBinaryString() kann man shcon arbeiten denke ich, allerdings wäre die manuelle Lösung performanter. Bitshift etc...



```
void toBits(int i, boolean[] arr, int off) {
    for(int k = 0; k < 32; k++) {
        arr[k + off]  = ((1 << k) & i) != 0;
    }
}

boolean[] intsToBits(int ... i) {
    boolean[] arr = new boolean[i.length * 32];
    
    for(int c = 0, ptr = 0; c < i.length; c++, ptr += 32) {
         toBits(i[c], arr, ptr);
    }

    return arr;
}
```


----------



## njans (22. Jun 2012)

Wenn du aus einem Byte[] einen int machen willst:

```
ByteBuffer buffer = ByteBuffer.wrap(array);
System.out.println(buffer.getInt());
```


----------



## tagedieb (22. Jun 2012)

Eventuell so?


```
String.format("%016d\n", Integer.parseInt(Integer.toBinaryString(256)));
```


----------



## Buckwild (25. Jun 2012)

@Kr0e:
Diese Lösung ist glaube ich am besten, weil sie, wie du schon sagst am performantesten ist. Ich hab sie etwas abgeändert um nicht den boolean Wert im Array zu speichern sondern direkt die resultierenden Einsen und Nullen. Danke für die Vorlage.

Zu deiner Frage 1:Ich habe einen String genommen weil ich meine Werte als String bekomme und diese als solches zurückgeben wollte.

@tagedieb:
Die Methode String.format() passt genau in meinen Kontext! Kannte diese vorher nicht. Dadurch kann ich mir das "auffüllen" der führenden Nullen sparen. Danke dafür.


----------



## binarymaster (21. Aug 2012)

Ich kann zwar deine Beweggründe verstehen, aber trotzdem ist es meiner Meinung nach ein Vorteil anstelle eines String ein Boolean zurüchzugeben.


----------

