ascii zu binär



  • wie kann ich eine ascii-zeichenkette in's binäre format umwandeln? (google war schweigsam)



  • Also ich habe mal eine sehr einfache Form codiert, ich hoffe Du lernst was draus.

    Zuerst mal eine Funktion die Dir jede bel. lange Zeichenkette in eine Binärkette konvertieren kann.

    /* 
    Eine etwas primitive Form; sie ist nur zum lernen gedacht. 
    Versuche Sie zu verstehen, dann ist eine Anpassung ans Konvertieren von 
    Zahlen sicher kein Problem mehr... ;)
    */
    int AsciiToBinaryString(const char *ascii, char *binary)
    {
      int len=strlen(ascii); //Länge der Zeichenkette ermitteln
      if(len==0) return len; //aufhören falls Quelle leer ist
      binary[0]='\0';		//erstes Byte im Zielpuffer setzen (sicherheitshalber)
      for(int i=0; i<len; i++) //alle ASCII-Zeichen der Quelle durchlaufen...
      {
        //alle Bits eines ASCII-Zeichen durchlaufen, begin mit Höchstwertigem
        for(int j=128; j>=1; j>>=1) 
        {
          if((ascii[i]&j) == j) //prüfen ob Bit gesetzt
            strcat(binary,"1"); //ja, dann eine 1 schreiben
         else
            strcat(binary,"0"); //nein, dann eine 0 schreiben
        }
        //hier sind nun die 8 Bit eines Zeichens in einen String konvertiert
        //jetzt sollte zur besseren Lesbarkeit ein Separator eingefügt werden
        strcat(binary," "); //ein Leerzeichen als Trennzeichen einfügen
      }
      return i; //Anzahl konvertierter Zeichen zurückgeben
    }
    

    Nun noch ein Anwendungsbeispiel:

    /*
    Anwendungsbeispiel:
    buf: Nimmt die konvertierte Zeichenkette auf, für die richtige Größe musst selber sorgen!
    eingabe: ein Puffer der eine Zeichenkette vom User entgegennimmt
    anzahl=Anzahl der konvertierten Zeichen
    */
    int main(int argc, char* argv[])
    {
      int anzahl=0;
      //Mindestgröße muß sein: Anzahl_Zeichen * 8 + Anzahl_Zeichen + 1
      //es werden ja 8 Binärzeichen pro ASCII-Zeichen benötigt,
      //dann ist immer noch ein Separator dazwischen (je einer pro ASCII-Zeichen)
      //dann muß der String noch ein abschliessendes \0 aufnehmen können
      //Prüfung ob Speicher reserviert werden konnte lass ich hier mal weg!
      char *buf=new char[200]; //sollte pauschal gross genug sein... auweia wenn nicht ;)
      char eingabe[21]={0};		//Eingabepuffer
      printf("Bitte ein Text eingeben, max. 20 Zeichen (keine Leerzeichen!): ");
      scanf("%20s", eingabe); //Eingabe entgegennehmen und im Puffer ablegen
      eingabe[20]='\0';	//zur Sicherheit nochmal mit \0 abschliessen
      anzahl=AsciiToBinaryString(eingabe, buf);  //Eingabe konvertieren lassen
      printf("%d Zeichen wurden Binaer konvertiert:\n%s", anzahl, buf); //Ergebnis ausgeben
      delete [] buf;  //dynamisch reservierten Speicher freigeben
      return 0;
    }
    

    Ich hoffe das hilft Dir erstmal, ne Info obs tut wär dann mal net schlecht 😕

    Gruss


Anmelden zum Antworten