WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Falsche Ausgabe bei fread

 

cprech86

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2011, 12:05     Titel: Falsche Ausgabe bei fread
  Antworten mit Zitat      
Hallo,

ich habe ein C-Programm geschreiben wo ich jetzt anfangs einen INT-Wert mittels

Code:

fp = fopen(pfad,"rb");
int testint = -300;
fwrite (&testint, sizeof (testint), 1, fp);
 


in eine binäre .dat Datei schreibe.

Im Matlab möchte ich jetzt diesen INT-Wert wiederrum auslesen
Durch
Code:

fopen('name.dat');
fread(scandaten, 'int8 => int16');
 


kommt jetzt aber statt -300 leider

-1
-1
-2
-44

raus. Kann ich mir leider nicht erklären was da falsch läuft.
Vielleicht hat ja einer eine Idee.
Besten Dank. Smile


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 24.03.2011, 12:33     Titel:
  Antworten mit Zitat      
Hallo
Du musst schon genau wissen, in welchen Format du die Daten vorher gespeichert hast? War es etwa wirklich INT8?

Hier mit erstelle ich eine Beispieldatei.
Schreibe -300 binär als INT16 in Datei aus
Code:

fid = fopen('name.dat', 'wb')
fwrite(fid,-300,'integer*2')
fclose(fid)
 


so lese ich dann aus:
Code:

fid = fopen('name.dat','rb');
fread(fid, 'int16=>int16');
fclose(fid);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 24.03.2011, 12:34     Titel: Re: Falsche Ausgabe bei fread
  Antworten mit Zitat      
Hallo cprech86,

Ein "int" hat auf 32-Bit-Maschinen üblicherweise 32 Bit, also 4 Bytes.
Auf 64-Bit-Maschinen sind es üblicherweise 64 Bit, also 8 Byte.
Wenn Du Dein Programm plattformunabhängig schreiben möchtest (wärmstens zu empfehlen!!!), musst Du also genau angeben, welche Art von Integer Du denn möchtest:
Code:

% C:
fp = fopen(pfad, "wb");   % Nicht "rb"!
int32_T testint = -300;
fwrite (&testint, sizeof(testint), 1, fp);
fclose(fp);         % EDITED

% Matlab:
FID = fopen('name.dat');
fread(FID, 1, 'int32=>int32');
fclose(FID);    % EDITED
 

Gruß, Jan

Zuletzt bearbeitet von Jan S am 24.03.2011, 13:00, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
cprech86

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2011, 12:46     Titel: RE:
  Antworten mit Zitat      
HI JAN!

Besten Dank für die Info zum platformunabhängigen Programmieren. Muss ich in Zukunft mehr darauf achten. Smile

Leider habe ich immer noch ein falsches Ergebnis.

Es kommt jetzt -721485825 raus Sad

kA.

Besten Dank
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 24.03.2011, 13:04     Titel: Re: RE:
  Antworten mit Zitat      
Hallo cprech86,

Tatsächlich ist dies equivalent:
Code:
typecast(int8([-1, -1, -2, -44]), 'int32')
>> 721485825

Allerdings sehe ich keine Verbindung zwichen [-1,-1,-2,-44] und -300. Ich vermute, Du liest nicht in dem File, das Du schreibst. Oder nicht an der gleichen Stelle. Das von mir gepostete Beispiel liefert nämlich in Matlab ordentlich -300 zurück.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
cprech86

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2011, 14:07     Titel: RE:
  Antworten mit Zitat      
Besten Dank für die schnelle Anwort!

Das Problem lag leider wo anders. Smile

=> man beachte big/little endian

Code:
% BSP.:
fp = fopen(pfad, 'wb'), 'r', 'b');
 


chris
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.