Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Delphi Record in File speicher, in C öffnen (https://www.delphipraxis.net/99257-delphi-record-file-speicher-c-oeffnen.html)

chaoslion 9. Sep 2007 15:49


Delphi Record in File speicher, in C öffnen
 
Hey Leute,
ich hab ein record:
Delphi-Quellcode:
type TRec = record
 txt: string;
 len: integer;
end;

dies würde ich gerne in eine Datei speichern, welche ich dann in C öffnen möchte.
Wie sieht das mit den Datentypen aus, ich denke das Delphi-Integer wird bei C passen, aber wie sieht es mit dem string aus?

Öffnen würde ich es dann mit fopen, fread und dem struct
Code:
struct TRec {
 ???? txt;
 int len;
};

DeddyH 9. Sep 2007 16:01

Re: Delphi Record in File speicher, in C öffnen
 
Hi, wenn Du einen String fester Länge nimmst, sollte es gehen.

chaoslion 9. Sep 2007 16:14

Re: Delphi Record in File speicher, in C öffnen
 
und muss in C dann txt vom typ char[x] sein?
also ich nehme einen string[255], dann muss ich auch einen char[255] nehmen?

Chemiker 9. Sep 2007 16:21

Re: Delphi Record in File speicher, in C öffnen
 
Hallo chaoslion,

vielleicht hilft Dir das weiter.

Delphi-Quellcode:
typedef
struct
    {char txt[81];
      int len;
    } TRec;
Delphi-Quellcode:
type
  TRec = packed record
      Txt: string[80];
      Len: integer;
End;
Bis bald Chemiker

r2c2 9. Sep 2007 16:22

Re: Delphi Record in File speicher, in C öffnen
 
Zitat:

Zitat von chaoslion
und muss in C dann txt vom typ char[x] sein?
also ich nehme einen string[255], dann muss ich auch einen char[255] nehmen?

Fast string[255] und char[256]. Warum? Delphi/pascal speichern bei ShortStrings in [0] die Länge und indizieren mit 1 beginnend. In C wird mit 0 angefangen. d.h. char[256] nehmen und auch mit 1 anfangen und es sollte klappen...
(oder in Delphi n array[0..254] of char nehmen. Das geht natürlich auch)

BTW: N Hex-Editor is da manchmal praktisch...

mfg

Christian

Chemiker 9. Sep 2007 16:32

Re: Delphi Record in File speicher, in C öffnen
 
Hallo,

in C beginnt der Stringinhalt mit dem ersten Element eines Arrays(txt_array[0]), das Ende des Strings wird durch ein NULLZEICHEN (ASCII – Code: 0) markiert. Für die Speicherung von 80 Zeichen muss also ein Array mit 81 Elementen benutzt werden.

Bis bald Chemiker

r2c2 9. Sep 2007 17:03

Re: Delphi Record in File speicher, in C öffnen
 
Zitat:

Zitat von Chemiker
in C beginnt der Stringinhalt mit dem ersten Element eines Arrays(txt_array[0]), das Ende des Strings wird durch ein NULLZEICHEN (ASCII – Code: 0) markiert. Für die Speicherung von 80 Zeichen muss also ein Array mit 81 Elementen benutzt werden.

Jein. Delphi wird sich wohl nicht so einfach dran halten(außer man stellt es händisch sicher ==> mit FillChar z.B.). Wenn man also n Struct mit größerer Länge hat, wird sich das C-Prog an den kleineren Datensätzen wohl etwas verschlucken... Bevor man dann aber die Strings aus dem Record in C-Stringfunktionen nutzen kann, muss man diese noch entsprechend behandeln...

Mit den packed hast du allerdings Recht. Ohne das macht das Alignment Probleme.

mfg

Christian


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz