AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TFileStream und Array...Daten verkehrt herum?
Thema durchsuchen
Ansicht
Themen-Optionen

TFileStream und Array...Daten verkehrt herum?

Ein Thema von Tyrael Y. · begonnen am 31. Jan 2008 · letzter Beitrag vom 1. Feb 2008
Antwort Antwort
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#1

TFileStream und Array...Daten verkehrt herum?

  Alt 31. Jan 2008, 16:05
Hallo zusammen,

irgendwie versteh ich grad das Verhalten von TFileStream nicht.

Ich habe TFileStream schon oft benutzt und mir dabei nie die Daten in der Datei genau angeschaut. Schon zig-tausendmal in Dateien Daten reingeschrieben und wieder gelesen, alles ohne Probleme.


Ich habe eine Datei und wenn ich mir diese Datei mit UltraEdit angucke fängt die Datei zB folgendermassen an.

Zitat:
00 00 0A 7C 00 00 0A 7C 00 00 0A 7C OC 23 90 08

Ich lese diese 16 Bytes folgendermassen aus, da jeweils 4 Bytes eine Zahl ist, die ich benötige.

Delphi-Quellcode:
procedure TuWas();
var
  LStream: TFileStream;
  LArray: array of integer;
begin
...
...
//Länge des Arrays setzen
SetLength(LArray, 4);
...
LStream.Read(LArray[0], 16);
..erwartet hab ich in LArray[0] zB die Zahl 2684 was den ersten vier Bytes entsprechen würde (00 00 0A 7C).
...erhalten habe ich in LArray[0] 2081030144 was der Hex-Darstellung (7C 0A 00 00) entspricht

Also wurden die Daten byteweise verkehrt herum in mein Array gelesen.

Wieso das?


Ich glaub es ist zu spät und ich steh grad nur auf dem Schlauch.
Ich mach jetzt Feierabend und guck mir die Geschichte mal morgen nochmal an.

(Wahrscheinlich fällt es mir mein Denkfehler auf dem Heimweg auf -.-)


Danke fürs Lesen
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: TFileStream und Array...Daten verkehrt herum?

  Alt 31. Jan 2008, 16:07
Dann such mal nach Little Endian (oder Big Endian).
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#3

Re: TFileStream und Array...Daten verkehrt herum?

  Alt 1. Feb 2008, 07:43
Mit folgender Funktion krieg ich genau das, was ich suche.

Delphi-Quellcode:
function SwapBytes(const ANumber: Cardinal): Cardinal;
asm
  mov edx, ANumber;
  bswap edx;
  mov result, edx;
end;
Danke sirius für den Schlag auf den Hinterkopf
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: TFileStream und Array...Daten verkehrt herum?

  Alt 1. Feb 2008, 07:48
Aber warum willst du das vertauschen?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#5

Re: TFileStream und Array...Daten verkehrt herum?

  Alt 1. Feb 2008, 07:52
Weil ich zB. wie oben beschrieben die Zahl 2684 brauche, um weiterzurechnen und nicht das umgedrehte, was beim Lesen durch den Filestream in meinem Buffer steht.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: TFileStream und Array...Daten verkehrt herum?

  Alt 1. Feb 2008, 15:13
Daran hat aber der Filestream keine Schuld, sondern es wurde so in der Datei gespeichert. Das ist das allgemeine Verhalten der x86 Architektur und das Dateiformat basiert halt auf z.B. der Motorola 68k Architectur, welche das (im eigentlichen richtigen Sinne) speichert organisiert.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#7

Re: TFileStream und Array...Daten verkehrt herum?

  Alt 1. Feb 2008, 15:18
Delphi-Quellcode:
function SwapBytes(const ANumber: Cardinal): Cardinal;
asm
  mov edx, ANumber;
  bswap edx;
  mov result, edx;
end;
ist "doppelt" gemoppelt, besser so

Delphi-Quellcode:
function SwapBytes(Value: Cardinal): Cardinal; register;
asm
  bswap eax
end;
BSWAP wird nicht auf allen CPU Plattformen unterstützt.

Gruß hagen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:31 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