Ascii in Binär-Ascii



  • lol
    wie wärs mit ner zuweisung

    if(tolower(Wort[0])) =='a')NeuWort[0]=Wort[0]  ;
    

    so ganz blick ich noch nicht was du da am ende überhaupt rausbekomen willst?



  • Am ende will ich Den Text in Binär Ascii haben, sprich, den text als 1en und 0en. wie auf diesen T-Shirt:
    http://www.thinkgeek.com/tshirts/generic/2826/
    (nicht persönlich nehmen, aber das was auf dem T-shirt steht, Binär-Ascii will ich raushaben... das is halt nur nen gutes Beispiel...nicht das du denkst ich will sagen du wärst dumm, gibt leute die könnten das falsch verstehen, das will ich auf keinen Fall sagen!!!).
    Bei deinem Code wär NeuWort dann ja auch a, das geht sowieso nicht, da NeuWort ein integer String ist. da kann ich keine Buchstaben reinschreiben. da kommen die 1en und 0en rein, die dann wieder in den EndWort string müssen. der ist ein char String.
    Hoffe ich hab das gescheit erklärt... ^^ 😃

    MfG,
    MCP



  • Bei deinem Code wär NeuWort dann ja auch a, das geht sowieso nicht, da NeuWort ein integer String ist. da kann ich keine Buchstaben reinschreiben

    klar geht das... ich glaub du hast da was grundlegendes nicht verstanden.. die repräsentation im speicher sind von vorherein nur 0 und 1...
    der kleinste datentyp in c hat aber immer ein byte...

    void binaer_ausgeben(unsigned char buchstabe){ 
    for(int i=8;i;--i)printf("%d",(buchstabe>>(i-1))&1); 
    } 
    
    int main(){
    char text[]="Hello World";
    
    for(int i=0;i<sizeof(text);++i)
    	binaer_ausgeben(text[i]);
    
    }
    

    wenn du das in ein array mit nullen und einsen ballern willst geht das auch problemlos musst du nur oben anstatt 0 und 1 mit printf auszugeben einfach zuweisen...

    allerdings würd ich dafür kein int-array nehmen weil sizeof(int) auf den meisten plattformen 4 byte verballert... kannst einfach eine char-array nehmen das 8 mal so gross ist wie dein string, da passen dann alle 0 und 1 rein so wie ichs dir hier gepostet habe



  • der kleinste datentyp in c hat aber immer ein byte...

    er hat mindestens 8 Bit... (nach C99) dh. er könnte auch größer sein, aber sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) muss erfüllt bleiben.

    bye

    tt



  • @TheTester
    mir war so als würde gelten

    1=sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)
    ist aus dem = wirklich ein kleiner gleich geworden?



  • Verstanden hab ich das schon!
    Hm, dein Code funktioniert (auch wenn er nicht c99 konform is, laut compiler, aber wenn man die Variablen vor der for schleich deklariert mackert er nicht mehr ^^ )
    So, dann werd ich mal versuchen das zu verstehen...
    Soweit ist alles klar bis auf: printf("%d",(buchstabe>>(i-1))&1).
    So ganz raff ich das noch nicht. Wird da jetzt automatisch, zum Umwandeln der dezimal Wert des Buchstaben genommen? also: H (was beim ersten Aufruf von Ausgabe_Binär übergeben wird) wär da ja: 72, was Binär 1001000 wär (und das gibt er auch aus, komischerweise mit eine 0 davor...). Aber sonst versteh ich den Teil von dem Code noch nicht, kannst du mir das erklären?
    Muss das verstehen um es in mein Programm übernehmen zu können...

    MfG,
    MCP



  • guck in den anderen thread da wo ich dir den link gepostet hatte...
    da hat sidewinder das megaausführlich erklärt...



  • Ok, also, ich glaub ich habs vom Prinzip verstanden. Hab zwar noch nicht gerafft was ">>" ist (nen Operator? oder 2x kleiner? to binary?) Aber das system nach dem es abläuft, danke für die Hilfe, jetzt müsste ich es auch in den Code implementieren können.

    Danke für die Hilfe!

    MfG,
    MCP



  • Das sollte eigentlich in jedem Tut oder Buch drinstehen, was >> und << zu bedeuten haben.
    Das sind die Bitshifting-Operatoren. Damit wird ein bestehendes Bitmuster in die jeweilige Richtung um soundsoviele Stellen verschoben, also etwa so:

    char a = 10; //1 Byte, damits nicht zu aufwändig wird, Wert binär: 00001010
    char b, c;
    b = a >> 1;      //Wert von b binär: 00000101
    c = a << 2;      //Wert von c binär: 00101000
    

    Schau dir mal ein paar Tuts an, da stehts noch genauer erklärt.
    [edit]Oh Gott, was für eine Rechtschreibung[/edit]



  • Verwirrt bin... Das steht in keinem meiner Bücher und in der Schule hat un das auch keiner beigebracht...
    Aber gut, werd ich mal nach suchen, danke für den Tipp...
    Wie merkwürdig das is, das ich sowas wichtiges einfach übersehen hab... Was mich aber noch mehr wundert, das wir das in der Schule (Fachhochschule Informationstechnik) nicht mal im Ansatz durchgenommen haben...
    Aber jetzt raff ich das mit dem Code auch! Danke!

    MfG,
    MCP

    P.S.: Das macht mich echt fertig das das so an mir vorbeigezogen is...



  • da mit dem >> hät ich dir auch sagen können 😃



  • Da deine Anwendung eine WinApi-Geschichte ist, will ich hoffen, daß dein Text nicht als Unicode vorliegt, da sonst ein 1 Byte nicht ausreicht. Ferner benutzt die WinApi nicht ASCII sondern ANSI, d.h. die zeichen > 127 differieren.



  • const int binaerwerte[] ={1,2,4,8,16,32,64,128};
    
    string DtoB (int Number)
    {
      int Code=Number;
      string Ergebnis="";
      for (int i=7;i>-1;i--)
      {
         if (Code-binaerwerte[i]<0) Ergebnis="0"+Ergebnis;
         if (Code-binaerwerte[i]>=0)
         {
          Ergebnis="1"+Ergebnis;
          Code=Code-binaerwerte[i];
         }
       }
      return Ergebnis;
    }
    //---------------------------------------------------------------------------
    

    So, mit dieser Funktion hab ich meinerzeit (lang, lang ist's her 😉 )
    Integer in ASCII-Binärzahlen umgewandelt - wobei diese natürlich nicht binär sondern in einem String gespeichert werden.

    Um die Buchstaben in Integer umzuwandeln machst du einfach einen String:
    string letter = " !'#% ...";
    In den Schreibst du einfach alle ASCII-Zeichen von 31-255 hintereinander rein.
    Dann suchst du bei jedem neuen Zeichen in dem letter-String danach und rechnest Trefferposition+30 = IntegerWert des ASCII-Zeichens.

    Also, mit sicherheit geht das auch einfacher, aber ich finde es so am anschaulichsten.

    mfg,
    chris90 🙂



  • chris90 schrieb:

    Um die Buchstaben in Integer umzuwandeln machst du einfach einen String:
    string letter = " !'#% ...";
    In den Schreibst du einfach alle ASCII-Zeichen von 31-255 hintereinander rein.
    Dann suchst du bei jedem neuen Zeichen in dem letter-String danach und rechnest Trefferposition+30 = IntegerWert des ASCII-Zeichens.

    Also, mit sicherheit geht das auch einfacher, aber ich finde es so am anschaulichsten.

    chris90 🙂

    Also das ist der absolute Qutasch, da ja im dem char schon der Asciiwert drinsteht, und nur durch interpretation durch den Computer in ein Zeichen
    umgewandelt wird.

    probier doch mal ein einfaches

    printf("%d",'a');
    

    grüße, Con@n


Anmelden zum Antworten