Datei gliedern



  • Indem du nach ihm suchst 😉 (der "Hex-Wert" 00 entspricht dem ASCII-Zeichen '\0')



  • Dark_DanI schrieb:

    ich glaub so könnte man das sagen...Aber wie finde ich denn dann einen solchen Wert wie 00? 😕

    Nun kommt die Quizfrage: Welche der folgenden Variablen enthalten _nicht_ den gleichen Wert?

    int a = 0;
    int b = 00;
    int c = 0x0;
    int d = '\0';
    int e = '\x0';
    


  • Ums mal darzustellen:

    Ich gebe den string "A" ein. Benutze atoi und erhalte dadurch......0
    Ich gebe "X" ein. Benutze atoi und erhalte dadurch.................0

    Bringts irgendwie net so ganz mit dem integer...Es ist am Ende eh immer 0, außer natürlich, der string is ne Zahl, aber ich will ja in eine Text nach dieser 00 suchen---



  • atoi() ist auch nicht der richtige Ansatz für dein Problem. Du willst den ASCII-Wert der einzelnen Zeichen und den erreichst du über Index-Zugriffe ( str[0] ist der Wert des ersten Zeichens etc).

    PS: Und im Umgang mit C-Strings markiert \0 alias 0x00 das Ende eines Strings.



  • ich glaub wir reden hier irgendwie aneinander vorbei...
    00 war vielleicht ein schlechtes Beispiel...Sagen wir, ich suche nach dem Wert A2.
    habe meinen cstring, wo meine "Buchstaben" drin sind, und einer von denen hat als hex-Ausgabe den Wert A2. Wie finde ich den?



  • Genauso: Indem du ihn suchst (je nach Vorgaben per std::string::find() oder zur Not auch per strchr()).

    (char ist ein Ganzzahltyp, der je nach Anwendung als ASCII-Zeichen interpretiert wird. Also kannst du es auch problemlos mit 0xA2, 162 oder '\xA2' vergleichen)



  • z.B. so:

    string s = "Dies ist ein toller String!";
    char c = 0xA2; // <-- hiernach wird gesucht
    
    size_t pos = s.find(c);
    if(pos != string::npos)
       cout << "Position: " << pos << endl;
    


  • interesanter Ansatz..ich glaub langsam klingelts, werds mal probieren...Vielleicht noch ne kleine Erklärung zum unteren Bereich.
    if( pos != npos )????
    Was ist npos?
    und ist size_t etwa ein Typ?



  • Hallo

    Was ist npos?

    Ist eine statische Konstante der string-Klasse und definiert die Rückgabe der find-Methode für den Fall "nicht gefunden".

    und ist size_t etwa ein Typ?

    Ja, und ist für Größenangaben passend zum Adressbereich der Plattform.
    I.d.R. ist es ein typedef auf unsigned int.

    bis bald
    akari



  • ahh....ja.

    Also ums in Worten zusammenzufassen:

    Falls pos NICHT NICHT gefunden wurde, dann ...

    Das mit size_t hab ich nocht nicht ganz verstanden...wäre ein int da nicht das selbe?



  • Hallo

    Falls pos NICHT NICHT gefunden wurde, dann

    Einmal NICHT reicht.

    Das mit size_t hab ich nocht nicht ganz verstanden...wäre ein int da nicht das selbe?

    Nein ein int nicht. Es gibt keine negativen Positionsangaben in einem Array, nur positive und 0.
    Ein unsigned int ist sowohl logisch als auch technisch äuqivalent. Deshalb ist size_t ja auch nur ein typedef, keine eigene Klasse/POD.

    bis bald
    akari



  • Wieso != == Nicht
    und npos == NICHT
    Und ich will ja wissen, wann es gefunden wurde und nicht. wann Nicht gefunden...

    Funktionieren tuts jedenfalls nicht...Ich bekomme jedesmal die selbe Ausgabe
    4294967295 geliefert...

    😕



  • Hallo

    Ja richtig.

    bis bald
    akari



  • Dark_DanI schrieb:

    Funktionieren tuts jedenfalls nicht...Ich bekomme jedesmal die selbe Ausgabe
    4294967295 geliefert...

    string::npos == 4294967295

    Also nichts gefunden.
    Ths Code fängt den Fall aber ab.
    Ich folgere: Du hast den Code nicht richtig kopiert.



  • Ich habs kopiert und halt den string mit nem buffer aus ner Datei gefüllt->

    ifstream IN1("test.txt", ifstream::binary|ifstream::in);
    IN1.seekg(0, ifstream::end);
    int size = IN1.tellg();
    IN1.seekg(0);
    char buffer[size];
    IN1.read(buffer, size);
    string sbuffer = buffer;
    char c = 0xEE;

    size_t pos = sbuffer.find(c);
    if( pos != string::npos);
    {
    cout << "Position: " << pos;
    }

    ->Es kommt egal, wonach ich suche, immer das selbe Ergebnis. Und im Hex-Editor steht auch, dass solche Werte, wie ee enthalten sein müssten 😞

    EDIT:
    Ich hab jetz ma ne neue Datei geschrieben, in der ich im Hex, dann ee eingegeben habe...>auf einmal findet er auch ne Position, mit der ich was anfangen kann. Bei meiner anderen Datei->wo ebenfalls ee`s drin vorkommen, findet er komischwerise nichts 😕

    EDIT2:

    Habs endlich geschafft->habs aber anders gelöst.

    ich hab ne for-Schleife, die den ganezen cstring einmal durchgeht und wenn eben i 0xee ist anschlägt>manchmal ist die Lösung vielleicht zu einfach um sie zu sehen. Trotzdem vielen dank 😉


Anmelden zum Antworten