Wie bestmmt man die Länge beim ifstream?



  • Also ich möchte zwei zeichen einlesen und als eins interpretieren:
    also z.B 3b einlesen und als i=3b interpretieren, wie kann ich das machen?



  • awl schrieb:

    Also ich möchte zwei zeichen einlesen und als eins interpretieren:
    also z.B 3b einlesen und als i=3b interpretieren, wie kann ich das machen?

    Als std::string einlesen? Keine Ahnung... Mir ist dein Problem unverständlich.



  • ich habe eine datei: 1625b6d
    ich möchte mit datei.read(puffer,2) in den puffer 16 usw einlesen.
    Mein Problem ist aber dass er immer nur ein zeichen liest .


  • Mod

    Das sollte eigentlich mit read gehen. Daher ist anzunehmen, dass du sonst irgendwo einen Fehler hast. Zeig mal mehr Code.



  • awl schrieb:

    ich habe eine datei: 1625b6d
    ich möchte mit datei.read(puffer,2) in den puffer 16 usw einlesen.
    Mein Problem ist aber dass er immer nur ein zeichen liest .

    genau das macht doch mein struct OO
    mir ist zwar auch noch immer nicht klar, wieso du das brauchst - aber falls du das weiterhin nicht sagen möchtest:

    struct two_chars
    {
      char a, b;
    };
    
    std::istream& operator<< (std::istream &i, two_chars &these)
    {
      i >> these.a >> these.b;
      return i;
    }
    
    int main()
    {
      std::ifstream stream("datei.endung");
      two_chars tmp;
      stream >> tmp;
    
    //  tmp.a + tmp.b oder wie auch immer du die beiden zusammen interpretieren möchtest...
    }
    

    wie wärs damit: du sagst, _was_ du machen möchtest und _nicht_ nur wie...
    und dann weiß hier bestimmt irgendjmd, wie man das machen kann - oder vor allem erst mal, was du möchtest^^

    bb



  • Das ist einfach nur eine übung für die schule.
    wir müssen immer zwei zeichen einlesen und als dezimalzahl ausgeben.
    bd1402 -> bd 14 02 -> 189 20 2
    besser? 🙂



  • awl schrieb:

    Das ist einfach nur eine übung für die schule.
    wir müssen immer zwei zeichen einlesen und als dezimalzahl ausgeben.
    bd1402 -> bd 14 02 -> 189 20 2
    besser? 🙂

    hmm...

    #include <fstream>
    #include <iostream>
    #include <iomanip>
    
    struct two_chars
    {
      char content[2];
      wchar_t reinterpret() const {return reinterpret_cast<wchar_t>(content);}
    };
    
    std::istream& operator>> (std::istream &i, two_chars &these)
    {
      i >> these.content[0] >> these.content[1];
      return i;
    }
    
    int main()
    {
      std::ifstream stream("datei.endung");
      two_chars tmp;
      stream >> tmp;
    
      std::cout << std::hex << tmp.reinterpret();
    }
    

    so in etwa?!



  • So kompliziert? Geht es nicht einfacher? 😞



  • dochdoch:

    char tmp[2];
    std::ifstream stream("a.txt");
    stream.read(tmp, 2);
    std::cout << std::hex << reinterpret_cast<unsigned short>(tmp);
    

    das hat aber allg. nicht viel mit standard-konformität zu tun - aber für das system, auf dem du arbeitest, geht es...

    geht nat auch wieder noch toller - aber nicht mehr sehr viel kürzer^^ hab jz allerdings auch keine zeit mehr, dir noch paar andere lösungen zu präsentieren - und da du nicht mal ansatzweise sagst, was du kannst und wie du es machen würdest und ca. 0 quellcode zeigst, gibts auch keinen grund, sich die zeit zu nehmen!

    bb


  • Mod

    awl schrieb:

    So kompliziert? Geht es nicht einfacher? 😞

    Klar. aber du zeigst keinerlei Initiative, zeigst keinerlei Ansatz deinerseits und du sagst ganz klar, dass es sich um Hausaufgaben handelt. Das demotiviert Leute die dir antworten könnten.



  • Ich habe das so gemacht, aber der liest trotzdem nur ein zeichen ein. Das ist ja mein Problem.

    stringstream s;
    datei.read(puffer,2);
    s.write(puffer,2);
    s >>hex >>zahl;

    Es ist ja nicht so dass ich nichts gemacht habe.



  • Das funktioniert acuh nicht. Hat es vielleicht damit zu tun, dass ich im Unicode arbeite? Ist es da vielleicht anders?
    Sitze schon den ganzen Tag dran, hab schon so viele möglcihkeiten ausprobiert, aber der will mir einfach nicht 2 zeichen einlesen.



  • awl schrieb:

    Das funktioniert acuh nicht. Hat es vielleicht damit zu tun, dass ich im Unicode arbeite? Ist es da vielleicht anders?
    Sitze schon den ganzen Tag dran, hab schon so viele möglcihkeiten ausprobiert, aber der will mir einfach nicht 2 zeichen einlesen.

    zeig doch endlich mal _deinen_ ansatz...



  • An alle ein großes Dankeschön!
    Habs hingekriegt 🙂



  • 😃


Anmelden zum Antworten