datein binär einlesen



  • Hallo zusammen,
    ich habe ifstream read aus einem Datei glesen und den Wert in einem char test[4] gespeichert. Jetzt steht in test[3]= 68 "D". ICh würde gerne die 68 weiterverarbeiten aber wenn ich atoi (test) nehme kriege ich "D" und nicht die 68. Kann mir jemand helfe?


  • Mod

    Ganz einfach: Ob da 68 oder D ausgegeben wird ist eine reine Sache wie die Ausgabe formatiert steht. Im Speicher steht da nur der Wert 68. Fazit: Du kannst einfach drauflos rechnen.



  • danke für deinen schnellen antwort. Ich möchte die zahl mit 3 ANDen und deswegen speichere ich zuerst

    int test;

    dann {in char wert ist mein '68'}

    test= atoi (wert);
    ich bekomme aber für test immer null



  • Was für ein Test?! - Post mal den Code, den du hast.



  • code:
    char byte5 [1];
    char byte5Bis7 [3];
    ifstream file;
    file.open("test.vob",ios::binary);
    file.read (byte5,1);

    so jetzt habe ich in byte[0]= 68 "D" stehen. Ich möchte die 68 mit
    3 anden also:
    68 & 3;
    dafür mache ich
    int intWert;
    intWert =atoi(byte5);

    was mache ich falsch


  • Mod

    borhany schrieb:

    code:
    char byte5 [1];
    char byte5Bis7 [3];
    ifstream file;
    file.open("test.vob",ios::binary);
    file.read (byte5,1);

    so jetzt habe ich in byte[0]= 68 "D" stehen. Ich möchte die 68 mit
    3 anden also:
    68 & 3;
    dafür mache ich
    int intWert;
    intWert =atoi(byte5);

    was mache ich falsch

    Ein paar Sachen sind falsch:

    1. byte5 ist etwas ganz anderes als byte5[0]. Beschäftige dich ein bisschen mit Arrays, um den Unterschied zu lernen.
    2. atoi macht etwas anderes als du annimmst. Schlage das mal in einer Referenz nach.
    3. Wenn du cstrings (das heißt char Arrays + C funktionen wie atoi) verwenden willst, musst du beachten, dass cstrings am Ende noch Platz für ein Nullterminierungszeichen brauchen. Da du aber C++ machen willst, hast du sowas gar nicht nötig, weshalb ich hier nicht näher drauf eingehen will.
    4. Wie schon gesagt, kann man mit char direkt rechnen, wie mit ints auch. Somit ist eine mögliche Lösung:
    char foo = 'D';
      cout << (foo & 3) << endl;  // gibt 0, da 68 & 3 = 0
    


  • danke für dein ANtwort. Kannst du mir vielleicht sagen wie ich ein
    char charWert []= "256" mit einem int intWert = 256 anden kann.
    also
    char test = charWert & intWert;
    Wozu Arrays da sind weiss ich. Ich muss aber ein Wert herauskriegen, der in unterschiedlichen Bytes steckt das ist mein Prblem


  • Mod

    borhany schrieb:

    danke für dein ANtwort. Kannst du mir vielleicht sagen wie ich ein
    char charWert []= "256" mit einem int intWert = 256 anden kann.
    also
    char test = charWert & intWert;
    Wozu Arrays da sind weiss ich. Ich muss aber ein Wert herauskriegen, der in unterschiedlichen Bytes steckt das ist mein Prblem

    Das ist wiederum der Fall, wofür atoi da ist. Oder besser noch stringstream, wenn du die FAQ gelesen hättest. Beide funktionieren aber nicht mit einfachen char Arrays, sondern mit C strings. D.h. du musst dafür Sorge tragen, dass deine char Arrays nullterminiert sind und auch genügend Platz für das Terminierungszeichen vorhanden ist.

    edit: Und das wirft dann wieder die Frage auf, warum du mit char Arrays arbeitest und nicht mit std::string?


Anmelden zum Antworten