![]() |
RecordtoString
Hi,
ich kann mit dem UDPSockUtil Texte mit einer Länge von bis zu einer länge von 512 Byte verschicken, leider nützen mir texte herzlich wenig, da das parsen zu (zeit)aufwändig wäre. Was ich gerne verschicken würde wären records mit kleinen string (string[20]) und zahlen (integer, double). leider weiss ich zwei Sachen nicht wie wandle ich einen record in einen string um und wie wieder zurück. mfg, Björn |
Re: RecordtoString
Hallo,
mir fallen verschiedene Möglichkeiten ein:
|
Re: RecordtoString
|
Re: RecordtoString
hey Danke Move sieht wunderbar aus :)
|
Re: RecordtoString
move sollte die beste lösung sein:
Delphi-Quellcode:
SetLength(DeinString, SizeOf(DeinRecord));
move(DeinRecord, DeinString[1], SizeOf(DeinRecord)); |
Re: RecordtoString
Ja, aber Achtung: Das geht nur bis zu 255 Byte String/Pufferlänge! Alternative eben auch absolute, das ist dann für ganz Faule ;) - Ausser bei der Deklaration
Delphi-Quellcode:
procedure DoSomethingWithTheBuffer;
type // Buffer als Stringimitat TBuffer = record BufferLength : byte; BufferContents : array[0..255] of byte; end; var Buffer : TBuffer; BufferString : string absolute Buffer; begin // Irgendwas passiert mit den Buffercontents // ... Länge der Nutzdaten eintragen Buffer.BufferLength := 123; // Jetzt können wir auf den String zugreifen, denn Buffer.BufferLength = Bufferstring[0] // Dadurch braucht man kein Move, denn die Variablen liegen "übereinander" auf der selben Adresse. end; |
Re: RecordtoString
@Union:
Das "Achtung" gilt aber auch für dich: dein Code funktioniert nämlich nur mit ShortString, Delphi benutzt aber normalerweise lange (dynamische) Strings, bei denen es keine Längenbeschränkung auf 255 Zeichen gibt. In deinem Code ist BufferString also ein Zeiger mit einer Länge von 4 Bytes, den man wohl nicht mit TBuffer gleichsetzen sollte... Gruß Hawkeye |
Re: RecordtoString
:oops: Ja, Du hast Recht. In der Deklaration sollte Shortstring als Typenbezeichner stehen.
|
Re: RecordtoString
Was mich jetzt noch interessieren würde warum geht es nur bis 255 ?
|
Re: RecordtoString
Mit der folgenden Record-Definition gibt's weniger Probleme:
Delphi-Quellcode:
Zurück zum eigentlichen Thema des Threads:
TBuffer = packed record
BufferLength : byte; BufferContents : array [1..255] of byte; end; Ich benutze/kenne UDPSockUtil nicht, aber gibt es da keine Methode SendBuffer? //Edit @arbu man: das bezog sich wohl auf die Verwendung von ShortString Gruß Hawkeye |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 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 by Thomas Breitkreuz