![]() |
32 Bit Wert verschieden interpretieren
Hallo,
ich bekomme über eine Schnittstelle 32 Bit Werte. Diese sind aber manchmal Single Zahlen, Longword und manchmal LongInt. Wenn ich diese falsch "anfasse", kommt immer wieder Fehler bei Bereichsüberschreitung. Wie macht ihr das? Nehmt ihr mehrere verschiedene Variablen und deklariert sie dann über absolute auf die selbe Adresse oder wie macht ihr das? |
AW: 32 Bit Wert verschieden interpretieren
Inwiefern werden die "falsch angefaßt"? Beispielcode?
|
AW: 32 Bit Wert verschieden interpretieren
Ist ein wenig schwer zu erklären.
Wie gesagt, ich bekomme 4 Bytes und muss diese unterschiedlich interpretieren (single, longword, longint). Dann muss dieser Wert aber wieder an eine Funktion weitergereicht werden. Da ich aber nur diese 4 Bytes habe, weiß ich nicht, wie ich diese dann weiterreichen kann. WriteToSvr(Adr, v) wobei hier v ein single wäre WriteToSvr(Adr, v) wobei hier v ein longword wäre WriteToSvr(Adr, v) wobei hier v ein longint wäre Vielleicht irgendein Pointer, der alles beinhalten kann? |
AW: 32 Bit Wert verschieden interpretieren
Zum Prüfen
Delphi-Quellcode:
Ok, ich sehe du brauchst, LongInt, LingWord und Double. LongInt kannst du mit der oberen Funktion testen, für Single kannst du dir mit TryStrToFloat eine Funktion erstellen.
{ Prüft ob String ein Integerwert ist }
function IsValidInteger(S: String): Boolean; var I, Code: Integer; begin Val(S, I, Code); Result := Code = 0; end; { Prüft ob String ein Currencywert ist } function IsValidCurrency(S: String): Boolean; var C: Currency; begin Result := TextToFloat(PChar(S), C, fvCurrency); end; { Prüft ob String ein Extendedwert ist } function IsValidExtended(S: String): Boolean; var E: Extended; begin Result := TextToFloat(PChar(S), E, fvExtended); end;
Delphi-Quellcode:
function TryStrToFloat(const S: string; out Value: Double): Boolean; overload;
//Ungeprüft { Prüft ob String ein Double ist } function IsValidDouble(S: String): Boolean; var Value: Double ; begin Result := TryStrToFloat(S, Value); end; |
AW: 32 Bit Wert verschieden interpretieren
Ich kann das vielleicht nicht so richtig rumbringen.
Als Quelle kommen 4 Bytes an. Durch Festlegung weiß ich, dass es Single, Longword oder LongInt ist. Diese können dann mittels verschiedener Spinedits verändert werden. Dazu habe ich dann an Hand der Kennung den Wert jeweils in ein Single, Longword oder LongInt gespeichert. Nun muss ich aber die verschiedenen Werte wieder über eine Funktion wieder in die 4 Bytes zurückbekommen. Vielleicht muss ich irgendwie mit overload arbeiten? |
AW: 32 Bit Wert verschieden interpretieren
Also nochmal, du muß es nicht prüfen, du weißt ob es Single, LongInt, LongWord ist, du willst nur wissen wie du es weiter leiten kannst?
|
AW: 32 Bit Wert verschieden interpretieren
Zitat:
|
AW: 32 Bit Wert verschieden interpretieren
Zitat:
Zitat:
|
AW: 32 Bit Wert verschieden interpretieren
Hilft dir das weiter?
Delphi-Quellcode:
Und wie gesagt, ob du d oder i oder w als Variable nimmst, mußt du selbst vorher prüfen.
procedure MyTest(Value: Double); overload;
begin ShowMessage(FloatToStr(Value)); end; procedure MyTest(Value: LongInt); overload; begin ShowMessage(IntToStr(Value)); end; procedure MyTest(Value: LongWord); overload; begin ShowMessage(IntToStr(Value)); end; procedure TForm1.Button1Click(Sender: TObject); var d: Double; i: LongInt; w: LongWord; begin d := 1.7e308; i := -2147483647; w := 4294967295; MyTest(d); MyTest(i); MyTest(w); end; |
AW: 32 Bit Wert verschieden interpretieren
Zitat:
Vielen Dank. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:21 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