Reading doubles from binary .dat file



  • Also das File hat die Daten mit little endian gespeichert.
    Da stehen einfach Messwerte drinnen, die von woanders herkommen.

    std::ifstream file;
    	file.open("file.dat", std::ios_base::binary);
    
    	if(file.fail())
    		return -1;
    
    	std::vector<double> data(10);
    	if( file.good() )
    		file.read( (char*)data.data(), data.size() * sizeof(double) );
    	file.close();
    


  • Der Code sieht erstmal richtig aus.
    Kannst Du irgendwie die Daten zeigen?



  • Hmm....weiß jetzt nich, wie ich das am besten öffnen kann...



  • Habs mal mit nem HEX-Editor geöffnet.
    Weiß nich, ob ihr damit was anfangen könnt. Ist auch nur ein Auszug, weil die Datei sehr viele Messwerte enthält.

    `

    00000000 0000F8FF 00000000 0000F8FF

    00806C9C A2374E3F 00000000 0000F8FF

    0000FA0C EA974C3F 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    0080AE11 044E4A3F 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF

    00000000 0000F8FF 00000000 0000F8FF`

    Die Formatierung ist in der Datei natürlich nicht vorhanden.
    Hab ich jetzt nur mal wegen der Übersicht reingemacht.



  • Die ersten 32 doubles:

    -1.#QNAN00000000000 -1.#QNAN00000000000 0.00092215957633712611
    -1.#QNAN00000000000 0.00087260177856851931 -1.#QNAN00000000000
    -1.#QNAN00000000000 -1.#QNAN00000000000 -1.#QNAN00000000000
    -1.#QNAN00000000000 -1.#QNAN00000000000 -1.#QNAN00000000000
    -1.#QNAN00000000000 -1.#QNAN00000000000 -1.#QNAN00000000000
    -1.#QNAN00000000000 -1.#QNAN00000000000 -1.#QNAN00000000000
    -1.#QNAN00000000000 -1.#QNAN00000000000 -1.#QNAN00000000000
    -1.#QNAN00000000000 -1.#QNAN00000000000 -1.#QNAN00000000000
    -1.#QNAN00000000000 -1.#QNAN00000000000 -1.#QNAN00000000000
    -1.#QNAN00000000000 -1.#QNAN00000000000 -1.#QNAN00000000000
    0.00080275725064282710 -1.#IND000000000000

    Sieht richtig aus...



  • Was bedeutet denn das 1.#QUNAN?



  • NaN



  • Das hatte ich soweit schon nachgeschaut.
    Die Frage war eher, was das nun bedeutet. Kann denn sowas rauskommen, wenn man die Datei richtig einliest?


  • Mod

    Thrasher schrieb:

    Das hatte ich soweit schon nachgeschaut.
    Die Frage war eher, was das nun bedeutet. Kann denn sowas rauskommen, wenn man die Datei richtig einliest?

    Das ist sogar zu hoffen, dass das rauskommt und ein eindeutiges Zeichen, dass man es richtig gemacht hat, denn schließlich hast du ja in deinem Hexeditor gesehen, dass genau dies in der Datei steht.

    Die Frage ist wohl eher: Soll das wirklich in der Datei stehen? Bist du dir sicher, dass es die richtige Stelle der richtigen Datei ist? Stimmt das Format?



  • Die Endianess sollte doch aber hinhauen...little endian is das File und auf Windows sollte das doch auch so sein.

    Wenn ich die Hex-Werte zum Beispiel bei http://gregstoll.dyndns.org/~gregstoll/floattohex/ umrechnen lasse, dann gibt der immer korrekte Zahlen aus.



  • Und da kommt dann immer 3.14932264629e-319 raus. Wundert dich das nicht?
    Die Seite liest big endian.


Anmelden zum Antworten