2 zeichen aus datei lesen maniepulieren und in neue Datei schreiben



  • schon mal danke das ist auch nicht so das problem gewesen, das liegt bei mir eher darin genau 2 zeichen aus einer datei zu lesen und diese dann als einen int wert zu hinterlegen und diesen dan wieder auseinander zu nehmen


  • Mod

    franziska1988 schrieb:

    schon mal danke das ist auch nicht so das problem gewesen, das liegt bei mir eher darin genau 2 zeichen aus einer datei zu lesen und diese dann als einen int wert zu hinterlegen und diesen dan wieder auseinander zu nehmen

    Und genau das musst du gar nicht tun! Wenn du zwei Zeichen liest, dann sind die beiden schon Zahlen. Mit chars kannst du rechnen wie mit int, der einzige Unterschied ist der kleinere Wertebereich. Wenn du einen größeren Wertebereich für deine Rechnung benötigst, dann weise die chars für die Rechnung einem int zu. Stell dir einfach vor, chars wären wie shorts, nur noch kleiner.

    edit: Ach du meinst, du willst die beide in einen int packen? Ja, das ist natürlich möglich, du musst nur sagen, auf welche Weise du dir das vorstellst. Meinst du vielleicht so:

    int zusammen = char1 << CHAR_BIT + char2;
    

    ?



  • ok ich glaub wir reden aneinander vorbei das ich mit char ganz normal rechnen kann ist mir bewusst aber ich muss die beiden char zu einen verbinden und das ist mein problem das ich das nicht hinkriege:( und das nächste problem ist das ich es nicht hinkriege genau 2 zeichen aus ein datei auszulesen



  • ok also in etwas das hab ich vor:

    zeichenkette: ABCDEFGHI

    ich nehme zwei char

    AB ->065066 welches den int 65066 ergibt denn will ich dan beispielsweise + 40 rechnen welches 065114 ergibt und jetzt will ich wieder 2 zeichen rauskriegen also A und r ergibt und dann sollen die nächsten zwei zeichen ausgelesen werden und wieder maniepuliert werden brauch das für ein verschlüsselungsprogramm



  • franziska1988 schrieb:

    ound das nächste problem ist das ich es nicht hinkriege genau 2 zeichen aus ein datei auszulesen

    Wie wärs mit zweimal fgetc() ?

    so etwa?

    int zeichen, zeichen, zeichen2;
    FILE *fp;
    ....
    // Datei öffnen und dgl.
    ....
      zeichen1 = fgetc(fp);
      zeichen2 = fgetc(fp);
    
      zeichen = zeichen1 * 256 + zeichen2; // oder * 1000, musst du wissen
    
      printf("Komtrolle %d , %d -> %d\n", zeichen1, zeichen2, zeichen);
    
      zeichen = zeichen + 1;
    
      zeichen2 = zeichen % 256;  // oder % 1000
      zeichen1 = zeichen / 256;  // oder / 1000
    
      printf("Komtrolle %d , %d -> %d\n", zeichen1, zeichen2, zeichen);
    

    Das geht auch anders.


  • Mod

    Tut das Not, ausgerechnet im Zehnersystem zu rechnen? Wie auch immer, die oben gezeigte Rechnung geht analog, bloß muss man eben um 3 Zehnerstellen shiften (also mit 1000 multiplizieren), anstatt um CHAR_BIT Binärstellen. Und Rückgängig macht man das ganze eben rückwärts: 1000er Rest angucken für den rechten Teil und 1000er Division angucken für den linken Teil. Wenn du ganz elegant sein möchtest, gibt es auch noch die Funktion div aus der Standardbibliothek, die beides gleichzeitig ausrechnet.



  • ok ich brauch mal ne minuten zum ausprobieren^^ gib mir 4 bis 5 minuten



  • Ok das ist supi es klappt hab allerdings noch ein problem, ich will jetzt ne schleife um das gesamte teil bauhen, damit das ganze bis zum ende der Datei durchlaufen wird kannst du mir noch sagen wie das aussehen müsste?


  • Mod

    while ((char1 = fgetc(datei)) != EOF && (char2 = fgetc(datei)) != EOF) ...



  • franziska1988 schrieb:

    genau 2 zeichen aus einer datei zu lesen und diese dann als einen int wert zu hinterlegen und diesen dan wieder auseinander zu nehmen

    Dann lies doch auch gleich 1x 2 Zeichen und nicht 2x 1 Zeichen.
    Du kannst als Datentyp unsigned short, wchar_t oder evtl. auch noch union nehmen. (das spart die Bitfrickelei)


Anmelden zum Antworten