# ASCII in Binär umwandeln



## cheepy (4. Mai 2007)

Hallo,

ich komme hier nicht weiter

```
#include <stdio.h>                        /* printf, putchar, fopen, fclose */
#include <stdlib.h>
#include <string.h>

 int main(void)
{

unsigned short anzahl_bits;
unsigned short bit_maske, bit;
char string[] = "datei";
int laenge;
int i=0;
int c;


laenge = strlen(string);

for(i=0; i<laenge; i++)
    {
    	printf("\nDer String \"%c\" hat %d Zeichen",string[i], laenge);
    	c=string[i];
    	printf("\t\t\nDezimal %d\n ", c); 

    	anzahl_bits = sizeof(c)*2;
    	bit_maske = 1 << (anzahl_bits-1);
    	bit = anzahl_bits;

   	while( bit-- ) {
    	putchar( (c & bit_maske ) ? '1' : '0' ); //die ausgabe
    	bit_maske >>= 1;
   	}
  }

return 0;
}
```

So hier erzeuge ich ein String, dann ermittle ich die Länge von mein String, damit weis ich wie oft meine for-Schleife laufen soll. Dann zwerleg eich mein String in einzelnen Zeichen, um jedes Zeichen kann ich dann in ASCII umwandeln und dadruch weis ich welches Zahl versteckt sich hiner diesen Zeichen. In der while-Schleife erzeuge ich für jedes Dezimal zahl ein binären Bitmuster bzw gebe ich für jeden Zahl ein Bitmuster. So mein Proble ist das ich ein Array anlegen will, an den ich mein Bitmuster zuweisen kann und einzelnen bits manipulieren. Die ich später dann in ein größeren Bitmusster also 16 Bit-Muster( den ich auch als Array anlegen kann) einzeln an unterschiedlich Plätze plazieren kann.

Kann mir jemand helfen?


Lieben Gruß, Cheepy


----------



## deepthroat (5. Mai 2007)

Hi.





cheepy hat gesagt.:


> Hallo,
> 
> ich komme hier nicht weiter
> 
> ...


Da hast du jetzt Glück gehabt, das sizeof(c) == 4 war und du somit auf 8 Bits kommst. Genauso gut hätte sizeof(c) aber auch 2 sein können, oder auch 3.

Richtig wäre es so:
	
	
	



```
char c;

anzahl_bits = sizeof(c) * 8;
```
Da ein char aber *immer* genau 1 Byte gross ist, kannst du dir die Berechnung in dem Fall eigentlich sparen.



cheepy hat gesagt.:


> So hier erzeuge ich ein String, dann ermittle ich die Länge von mein String, damit weis ich wie oft meine for-Schleife laufen soll. Dann zwerleg eich mein String in einzelnen Zeichen, um jedes Zeichen kann ich dann in ASCII umwandeln und dadruch weis ich welches Zahl versteckt sich hiner diesen Zeichen. In der while-Schleife erzeuge ich für jedes Dezimal zahl ein binären Bitmuster bzw gebe ich für jeden Zahl ein Bitmuster. So mein Proble ist das ich ein Array anlegen will, an den ich mein Bitmuster zuweisen kann und einzelnen bits manipulieren. Die ich später dann in ein größeren Bitmusster also 16 Bit-Muster( den ich auch als Array anlegen kann) einzeln an unterschiedlich Plätze plazieren kann.


Es hindert dich doch niemand daran, die Bits direkt in dem string zu manipulieren. Wenn du die Bits natürlich als Folge von Nullen und Einsen - also als String - speichern willst, dann mußt du eben einen String anlegen, der 8 mal so gross ist wie der Originalstring, denn du brauchst dann für jedes Zeichen ja 8 "Bitzeichen".

Bsp:
	
	
	



```
char *bitstring = calloc(strlen(string) * 8 + 1, sizeof(*string));
...
free(bitstring);
```

Gruß


----------

