AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Streams - negativen Wert mit Write schreiben???
Thema durchsuchen
Ansicht
Themen-Optionen

Streams - negativen Wert mit Write schreiben???

Ein Thema von FreewareFire · begonnen am 13. Aug 2004 · letzter Beitrag vom 15. Aug 2004
Antwort Antwort
Seite 4 von 5   « Erste     234 5      
Benutzerbild von MacGuyver
MacGuyver

Registriert seit: 9. Sep 2003
Ort: Wildeshausen
295 Beiträge
 
Turbo Delphi für Win32
 
#31

Re: Streams - negativen Wert mit Write schreiben???

  Alt 13. Aug 2004, 20:01
Hi,

du verstehst das Prinzip noch nicht. Ganz einfach. Jeder Grundtyp belegt eine bestimmte Menge an Speicher. Ein Byte, Char, ShortInt und Boolean belegen ein Byte. Word und SmallInt belegen zwei Byte. Dann haben wir noch den Integer oder auch LongInt in Pascal der 4 Byte belegt. Es hat jetzt etwas mit Speicherplatz zu tun. Wie du nun die Bytes darstellst, ist egal. Willst du mehr wissen?

Stefan
p.S. Antwort dauert bis kurz vor Mitternacht.
Englisch eine Weltsprache? Zu kompliziert und der nahe Osten würde Englisch als Pflichtweltsprache nicht akzeptieren.
IDO wäre genau das Richtige: http://forum.idolinguo.de/index.php oder www.idolinguo.de
  Mit Zitat antworten Zitat
FreewareFire

Registriert seit: 25. Sep 2003
51 Beiträge
 
Delphi 7 Professional
 
#32

Re: Streams - negativen Wert mit Write schreiben???

  Alt 13. Aug 2004, 20:38
Also, smallint belegt doch 2 Bytes, oder nicht? Der Wert den ich schreiben möchte mit write ist auch 2 Byte groß. Und liegt in diesem Speicherbereich des smallint. Wo ist da das Problem?
  Mit Zitat antworten Zitat
Benutzerbild von MacGuyver
MacGuyver

Registriert seit: 9. Sep 2003
Ort: Wildeshausen
295 Beiträge
 
Turbo Delphi für Win32
 
#33

Re: Streams - negativen Wert mit Write schreiben???

  Alt 13. Aug 2004, 23:18
Das Problem liegt darin, die 2 Byte wieder in den Spin zu bekommen. Das geht nur über eine Zwischenvariable. Wofür ist da nun BC.Value * 10 drin? Was ist BC?
Englisch eine Weltsprache? Zu kompliziert und der nahe Osten würde Englisch als Pflichtweltsprache nicht akzeptieren.
IDO wäre genau das Richtige: http://forum.idolinguo.de/index.php oder www.idolinguo.de
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#34

Re: Streams - negativen Wert mit Write schreiben???

  Alt 14. Aug 2004, 00:36


Zitat von maximov:
...
Kann ja auch sein das du dir das einfach mit nem hex-editor anschaust und die einzelnen bytes in einen integer umrechnest, was dann rein garnix zu sagen hätte..
Zitat von maximov:
...
Ich glaub langsam, dass FreewarFire den wert den er schreibt garnicht in seinem eigenen programm wieder verwenden will. Vermutlich hackt (völlig wertfrei) er fremde daten und kennt deren kodierung nicht. Dann ist es vermutlich kein wunder wenn am anderen ende 6000 bei rum kommt...
Meine neue glaskugel ist echt gut 8) ...sehen sie selbst:


Zitat von Freewarefire:
...
Ach so, das auslesen mache ich nach dem die Datei gespeichert wurde mit einem Hexeditor. Per Knopfdruck wird also die Datei auf der Festplatte gespeichert. Danach kann ich sehen, dass der Wert nicht dem entspricht, den er haben müsste. Ansonsten lese ich nicht aus dem MemoryStream! Er liest die Datei ein, ändert den Wert und speichert die Datei wieder auf der Festplatte
...
Ist eine Datei von einem Spiel (RollerCoaster Tycoon 2). Das muss so sein.

Wenn du unsere beiträge nicht liest, dann ist es kein wunder, dass dieses lustige ratespiel keine früchte trägt. Sag doch einfach 'ja so und so is das' - erklär uns den sinn und welche information du darüber besitzt. Das is doch kein entspanntes arbeiten, schliesslich machen wir das auch nur zum spass und nicht weil wir quiz-shows so toll finden

nix für ungut
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
FreewareFire

Registriert seit: 25. Sep 2003
51 Beiträge
 
Delphi 7 Professional
 
#35

Re: Streams - negativen Wert mit Write schreiben???

  Alt 14. Aug 2004, 01:03
Ich versuchs nochmal:

BC ist das SpinEdit Steuerelement. MemoryStream ist das TMemoryStream Objekt! Ich lade die Datei, die kein TXT Format hat, sondern ein binäres Format per LoadFile in das MemoryStream Objekt. Dort setze ich die Position auf $1A und schreibe den Wert von BC.Value (also den Wert, der in den MemoryStream soll) in das MemoryStream mit der write funktion. Ich nehme mal an, dadurch dass es sich beim Wert von BC um einen Integer-Wert handelt gibt es dieses Problem. Wie ihr im Code sehen könnt ist der Wert als smallint definiert, da dieser 2 Bytes groß ist. Ich hoffe, das ist jetzt verständlich? Ansonsten stellt die Fragen Bitte genauer. Danke.

@Stefan: Der Wert soll ja nicht zurück ins SpinEdit! Er soll nur in den Stream!
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#36

Re: Streams - negativen Wert mit Write schreiben???

  Alt 14. Aug 2004, 02:15
Also, ich habs probiert. Egal ob ich SmallInt oder Longint als Ausgangswert nehme, es kommt am Ende dasselbe raus: Speichere ich den Wert -10 und öffne die Datei mit einem Hex-Editor, dann erscheint dort F6 FF, dies muss man nun wegen umgekehrter Bytefolge umdrehen, ergibt also FFF6. Dezimal ist das dann 65526, was bei einem SmallInt dann -10 entspricht.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#37

Re: Streams - negativen Wert mit Write schreiben???

  Alt 14. Aug 2004, 09:09
Hi Ralf,


ich bin sicher du hast uns noch nicht den ganzen Code gezeigt:

Delphi-Quellcode:
try
  
  //now open the file to check the type
  MemoryStream.LoadFromFile(STV1.Path + '\' + FList.Items.Strings[FList.ItemIndex]);

  MemoryStream.Position := $1A;
  BuildValue := BC.Value * 10;
  MemoryStream.Write(BuildValue, 2);

end;
// Da fehlt doch ein except oder ein finally?!?

Desweiteren: Ich kenne mich zwar nicht so mit MemoryStream aus, aber solltest du nicht noch:

MemoryStream.SaveToFile() schreiben?


Wenn ich falsch liege, dann berichtigt mich bitte!
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#38

Re: Streams - negativen Wert mit Write schreiben???

  Alt 14. Aug 2004, 09:20
Zitat von FreewareFire:
Und die Daten, die ich speichern will, befinden sich eben an $A1 !

Ja was nun?

Code:
MemoryStream.Position := [color=#ff0009]$1A[/color];
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#39

Re: Streams - negativen Wert mit Write schreiben???

  Alt 14. Aug 2004, 09:23
Also,

ich habs jetzt selbst mal getestet:

Schreiben:

Delphi-Quellcode:
var
  BuildValue: smallint;
  MemoryStream: TMemoryStream;
begin
  try
    MemoryStream := TMemoryStream.Create;
    //now open the file to check the type
    MemoryStream.LoadFromFile('F:\Test.bin');

    MemoryStream.Position := $1A;
    BuildValue := BC.Value * 10;
    MemoryStream.Write(BuildValue, 2);
    MemoryStream.SaveToFile('F:\Test.bin');
  finally
    MemoryStream.Free;
  end;
end;
Und so lesen:

Delphi-Quellcode:
var
  BuildValue: smallint;
  MemoryStream: TMemoryStream;
begin
  try
    MemoryStream := TMemoryStream.Create;
    //now open the file to check the type
    MemoryStream.LoadFromFile('F:\Test.bin');

    MemoryStream.Position := $1A;
    MemoryStream.Read(BuildValue, 2);
    Edit2.Text := IntToStr(BuildValue);
  finally
    MemoryStream.Free;
  end;
end;

Klappt alles wunderbar.
  Mit Zitat antworten Zitat
FreewareFire

Registriert seit: 25. Sep 2003
51 Beiträge
 
Delphi 7 Professional
 
#40

Re: Streams - negativen Wert mit Write schreiben???

  Alt 14. Aug 2004, 10:32
Hi Spider,

also, dass try sollte da nicht mit rein. Ich benutze das zwar, war aber für den Code unwichtig. Es geht sich ja um den schreib Part. Zur Position - mit 10 Finger System passiert das schon mal öfters. Wäre aber hier egal, da es darum geht, den negativen Wert des SpinEdit in Hex in den Stream zu bekommen. An welcher Position auch immer... Die kann ja wechseln. Nun und den Code zum lesen brauche ich nicht, da ich diesen schon habe - und der funktioniert, nur das schreiben halt nicht.

Trotzdem Danke!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


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 16:41 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