Bits in Datei schreiben



  • Hi!

    Angenommen ich habe einen String in dem Folgendes steht: "10000001" (also 65)
    und ich möchte diesen String so in eine Datei schreiben das dann das Zeichen A in der Datei steht.. wie mach ich das? Ist das mit (ANSI) c möglich?

    gruß f2k



  • konvertiere den string erst in ein char und schreib den dann in die datei...



  • Wie meinst du das? Soll ich einzeln auf die einsen und nullen zugreifen und dann in der art 1^8 + 0^7 + 1^6 usw rechnen?

    Oder kann man da einfach zuweisen??

    Ein weiteres Problem hatte ich auch beim zusammenfügen von zwei strings.
    Wenn ich die Srings "1000" und "0001" hab und diese zu einem zusammenfügen will wie macht man das? Habe es mit der strcpy funktion probiert aber das funzt irgendwie net?
    Muss ich da mit malloc arbeiten??

    mfg



  • nein du musst bedauerlicherweise den string einzeln durchgehen...
    ist aber nur ne schleife...

    ungetestet so ins forum gehackt

    char test[]="01000001";
    char *p,x=0;
    for(p=test;*p;++p)x=(x<<1)+ (*p=='1'?1:0);
    


  • Der Code funzt 😉

    Kannst du mir bei dem anderen problem mit den strings vielleicht auch noch helfen?
    Ich bekomm das einfach nicht hin zwei strings aneiander zu fügen..



  • na du brauchst dann in dem falle einen buffer der grösse 9 damit die beiden teilstrings und ein terminierungszeichen reinpassen...

    char str1[] ="1111";
    char str2[] ="0000"
    char buffer[9];
    sprintf(buffer,"%s%s",str1,str2);  //oder du nimmst strcpy und strcat...
    


  • Kann es sein das dein Prog nur 7 Bit umwandelt und das 8. Bit nicht?



  • öhm spontan würd ich sagen nein aber ich habs wie gesagt nicht getestet...
    anhand welchen beispielfalles klappt denn da was nicht?



  • Generell wenn das erste Zeichen eine 1 ist zählt der das net mit.
    zb: "10000000" gibt als wert -128 zurück...



  • das ist nunmal bei signed variablen so... das erste bit wird negativ interpretiert...
    wenn du das nicht magst nimm ein unsigned char...



  • Ach so.. das wusste ich nicht. Ich kenne mich da nicht so aus. Was ist den der unterschied zwischen signed und unsignes char? Und wie deklarier ich ein unsigned char??



  • Ach so.. das wusste ich nicht. Ich kenne mich da nicht so aus. Was ist den der unterschied zwischen signed und unsignes char

    na die einen sind halt vorzeichenbehaftet und die anderen nicht 😉
    unsigned char läuft (so char 8 bit gross ist) von -128 bis 127...
    im klartext das signed/unsigned gibt an ob das MSB negativ oder positiv interpretiert werden soll wenn singed dann ist das erste einfach -128 sonst 128

    Und wie deklarier ich ein unsigned char??

    manchmal gibt man sich die antwort schon selbst 😃

    unsigned char c;
    


  • Oh gut 😉

    Das ist ja praktisch, ich denke mal das wird mir weiter helfen.

    danke nochmal!



  • Nochmal ne Frage:

    Wenn ich jetzt endlich viele Zeichenketten habe die unterschiedlich lang sind und in jeder steht so eine Folge von 0 und 1, wie kann ich das am besten managen das ich immer 8bits an meine Funktion BitToChar schicke??

    ich habe einen array..

    char bitcodes[];
    
    bitcodes[0]="110"
    bitcodes[2]="01010"
    bitcodes[3]="1101"
    bitcodes[4]="1111011101"
    
    usw...
    


  • so wie du das gepostet hast geht das nicht...
    ein char ist nur ein einzelnes zeichen... ein array von chars (string) kann mehrere zeichen beinhalten...
    wenn du ein array von strings haben willst brauchst du ein ein char** ...


Anmelden zum Antworten