ifstream - Dateilänge hat negativen Wert



  • Hallo
    Ich benutzte Codegear RadStudio 2009
    und ich benutze in meinem Programm eine Funktion zum abspeichern und einlesen einer Datei. Ich nutze dafür ifstream.

    Im Ersten Zeichen der Datei speichere ich die Länge meines "Headers" ab und diese Länge möchte ich dann auch wieder auslesen.

    Bei bestimmten Datein bekomme ich jedoch einen negativen Wert dafür zurück, z.B. -91 , obwohl in der Datei als HEX A5 (165) steht?

    int pos = 0;
    // reading a complete binary file
      ifstream::pos_type len;
      char* buf;
      ifstream file(Dateiname.c_str(), ios::in|ios::binary|ios::ate);
      if (file.is_open())
      {
    	len = file.tellg();
    	buf = new char[len];
    	file.seekg (0, ios::beg);
    	file.read (buf, len);  //-91 steht auch hier bereits im ersten zeichen
    	file.close();          //des Buffers?!
      }
      else
    	return;
      int iLen;
      char str[256];
      char *pData;
      char* pString;
    
      iLen = (int)*buf;  // NEGATIVER WERT?!
      ...
    

    Wenn ich 10 Dateien gespeichtert hab , habe ich 8 wo alles richtig läuft und 2 besondere bei denen ich einen Negativen Wert erhalte. Wie kann das sein?



  • Abgesehen von new fails etc., mal daran gedacht, dass char nicht unsigned sein muss? 😉



  • beim verwenden von unsigned statt int kommt statt der -91 , 123234323423432 als Wert,
    also eine unbeschreiblich größe zahlt halt.



  • Fehler, beachtet nur das erste byte

    iLen = (int)*buf;
    

    Korrekt

    iLen = *(int*)buf;
    

    nimmt alle 4.



  • aLeXanDer.. schrieb:

    Fehler, beachtet nur das erste byte

    iLen = (int)*buf;
    

    Korrekt

    iLen = *(int*)buf;
    

    nimmt alle 4.

    aLeXanDer.. schrieb:

    Im Ersten Zeichen der Datei

    Man sollte sein eigenes Format schon kennen. 🙄



  • Aus Fehlern lernt man :p
    Manchmal steht man am schlauch 😃


Anmelden zum Antworten