AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

RecordtoString

Ein Thema von arbu man · begonnen am 24. Jun 2006 · letzter Beitrag vom 24. Jun 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#1

RecordtoString

  Alt 24. Jun 2006, 12:34
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
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
andreash

Registriert seit: 22. Jun 2006
Ort: Dörverden
60 Beiträge
 
Delphi 7 Professional
 
#2

Re: RecordtoString

  Alt 24. Jun 2006, 13:18
Hallo,

mir fallen verschiedene Möglichkeiten ein:
  • Schreibe die Felder deines Records in einen String, wobei du die Werte der Felder mit einem Trennzeichen trennst.
  • Verwende die Funktionen BinToHex und HexToBin; Nachteil: Der String wird doppelt so lang wie die Länge des Records
  • Verwende Base64 Routinen (Unter dem Stichwort Base64 findest du in diesem Forum einige Einträge)
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: RecordtoString

  Alt 24. Jun 2006, 13:25
Schau mal unter Delphi-Referenz durchsuchenMove oder Delphi-Referenz durchsuchenabsolute nach.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#4

Re: RecordtoString

  Alt 24. Jun 2006, 14:08
hey Danke Move sieht wunderbar aus
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: RecordtoString

  Alt 24. Jun 2006, 14:19
move sollte die beste lösung sein:
Delphi-Quellcode:
SetLength(DeinString, SizeOf(DeinRecord));
move(DeinRecord, DeinString[1], SizeOf(DeinRecord));
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: RecordtoString

  Alt 24. Jun 2006, 14:23
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;
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#7

Re: RecordtoString

  Alt 24. Jun 2006, 15:12
@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
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: RecordtoString

  Alt 24. Jun 2006, 15:20
Ja, Du hast Recht. In der Deklaration sollte Shortstring als Typenbezeichner stehen.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#9

Re: RecordtoString

  Alt 24. Jun 2006, 15:28
Was mich jetzt noch interessieren würde warum geht es nur bis 255 ?
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#10

Re: RecordtoString

  Alt 24. Jun 2006, 15:32
Mit der folgenden Record-Definition gibt's weniger Probleme:

Delphi-Quellcode:
TBuffer = packed record
  BufferLength : byte;
  BufferContents : array [1..255] of byte;
end;
Zurück zum eigentlichen Thema des Threads:
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:56 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