Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 10, 2025 12:31

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: C4D-Dateien
BeitragVerfasst: Mi Okt 18, 2006 15:19 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 20, 2003 13:59
Beiträge: 134
Wunderschönen guden dach,

ich versuche jetzt schon seit geraumer Zeit eine .c4d-Datei richtig Auszulesen aber es will nicht klappen.

In der Doku für das Format steht geschrieben das die Dateien mit "Motorola Byte Order (Big Endian)" gespeichert werden und das die ersten 4 byte die Dateierkennung darstellen und die nächsten 4 Byte die Dateigröße beinhalten.

Alles gut und schön aber dann hört es auf. Ich lese die ersten 4 byte im TFileStream aus und dann die zweiten 4 Byte (in einen LongInt wie in der Doku beschrieben), jetzt noch schnell per swap() die Byte-Reihenfolge ändern und ausgeben.
Das Ergebnis kommt der Dateigröße noch nicht einmal nahe. Habe auch schon ohne swap probiert oder als HexCode hab es schon übergangen und die folgenden Werte probiert aber nichts klappt.

Nun wollt ich mal nachfragen ob jemand von euch mir weiterhelfen kann, ob ich was falsch mache oder ob jemand schonmal sowas gemacht hat?

Danke in vorraus für Hilfe aller Art.

_________________
ghost-site.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 18, 2006 16:02 
Offline
DGL Member

Registriert: So Feb 19, 2006 23:46
Beiträge: 55
Unter C/C++ würde ich dafür die Funktionen aus den Netzwerk-Sockets verwenden, also sowas wie htonl und ntohl, ich weiß jetzt nur nicht inwieweit Sockets in Delphi verfügbar sind.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 18, 2006 16:12 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also unter Windows kann man das Problemlos mit Stream.Read(Cardinal, 4) einlesen. Allerdings kann ich dir jetzt nicht gesagen ob das Big Endian oder Little Endian ist. Auf jeden Fall hilfreich ist immer ein Hexeditor in dem man sich auch mal anschauen kann wie es in der Datei aussieht. Wenn man dann sein gelesenes als Hex sieht fällt es eigentlich sofort ins Auge falls es nicht stimmt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 19, 2006 19:32 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 20, 2003 13:59
Beiträge: 134
Ne funtzt irgend wie nicht aber trotzdem danke für die Antworten.

Es scheint nich am Code zu liegen sondern eher an der Duko die ich habe.
Es ist alles irgendwie anders. Naja dann werd ich wohl durch probieren heraus finden müssen was wohin gehört. :(

_________________
ghost-site.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 19, 2006 22:30 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Vermutlich ist es das alte .c4d Format, das mit dem neuen nicht mehr kompatibel ist. Zumindest habe ich bislang keine Dokumentation des neuen Formates gesehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 20, 2006 09:07 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 03, 2002 15:08
Beiträge: 662
Wohnort: Hamburg
Programmiersprache: Java, C# (,PhP)
Hast du es schonmal mit einem signed 32bit integer bzw einem float versucht? Meist liegt der Ursprung bei den Programmen in der Mitte, und es können negative wie positive Werte entstehen. Ist jedenfalls bei Maya so und dem Obj Format.

_________________
(\__/)
(='.'=)
(")_(")


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Okt 22, 2006 19:07 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 20, 2003 13:59
Beiträge: 134
Ja hab ich alles schon probiert.
Ich hab die Datentypen laut Doku genommen danach habe ich einmal jedes Word und dann noch jedes byte in alle Datentypen aus der Doku eingelesen aber ich habe keine übereinstimmung mit der Doku finden können.

Hab jetzt auch beschlossen das erstmal an den Nagel zu hängen und mich größerem zu widmen, ein eigener Modelleditor oder so :) .

_________________
ghost-site.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Okt 22, 2006 19:16 
Offline
DGL Member

Registriert: Sa Okt 22, 2005 20:24
Beiträge: 291
Wohnort: Frauenfeld/CH
hmm schade, ich wünsch mir scho lange mesh loader von vielen möglichen formaten ;)

_________________
bester uo-shard: www.uosigena.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Okt 22, 2006 19:18 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Mit den Skripts in Cinema4D kann man leicht in ein eigenes Format exportieren. Es gibt da Funktionen zum Schreiben von Text und Binärdateien.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 23, 2006 22:05 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Delphi-Hilfe hat geschrieben:
Swap vertauscht das höherwertige mit dem niederwertigen Byte des mit X angegebenen Wertes. X ist ein Ausdruck des Typs SmallInt oder Word (16 Bit). Die Funktion ist nur aus Gründen der Abwärtskompatibilität vorhanden.

Beispiel: Swap($01020304)=$00000403
Alternative
Code:
  1.  
  2. function SwapDword(const x:integer):integer;
  3. type TIntRecord=record
  4.   b1,b2,b3,b4:byte;
  5.  end;
  6. begin
  7.  TIntRecord(result).b1:=TIntRecord(x).b4;
  8.  TIntRecord(result).b2:=TIntRecord(x).b3;
  9.  TIntRecord(result).b3:=TIntRecord(x).b2;
  10.  TIntRecord(result).b4:=TIntRecord(x).b1;
  11. end;
  12.  

Beispiel: SwapDword($01020304)=$04030201
Sollte also funktionieren.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot] und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 16 Queries | GZIP : On ]