![]() |
Re: Streams - negativen Wert mit Write schreiben???
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. |
Re: Streams - negativen Wert mit Write schreiben???
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?
|
Re: Streams - negativen Wert mit Write schreiben???
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?
|
Re: Streams - negativen Wert mit Write schreiben???
:mrgreen:
Zitat:
Zitat:
Zitat:
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 :mrgreen: :cheers: nix für ungut |
Re: Streams - negativen Wert mit Write schreiben???
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! |
Re: Streams - negativen Wert mit Write schreiben???
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.
|
Re: Streams - negativen Wert mit Write schreiben???
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:
Delphi-Quellcode:
schreiben?
MemoryStream.SaveToFile()
Wenn ich falsch liege, dann berichtigt mich bitte! |
Re: Streams - negativen Wert mit Write schreiben???
Zitat:
Ja was nun?
Code:
MemoryStream.Position := [color=#ff0009]$1A[/color];
|
Re: Streams - negativen Wert mit Write schreiben???
Also,
ich habs jetzt selbst mal getestet: Schreiben:
Delphi-Quellcode:
Und so lesen:
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;
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. :zwinker: |
Re: Streams - negativen Wert mit Write schreiben???
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! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz