[Delphi] String + Record naar Array

Pagina: 1
Acties:

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Ik wil een String en een Record in een Array zetten en die als een versturen.

Dus :

String 'Ikke'
Record.x = 1
Record.y = 2

en die wil ik in Array van 2048 bytes/chars zetten en oversturen.

Ik heb geprobeerd met Move, maar dan krijg ik alleen de record in de Array.
En met Copy krijg ik alleen de string in de Array

Weet iemand hoe ik deze items samen in een Array kan krijgen?

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

In een array zullen allemaal items van hetzelfde type moeten komen te staan, en dat is hier niet het geval. Ik denk niet dat je dat voor elkaar krijgt. En verder, hoe moet de ontvanger van zo`n array dan weten wat hij ermee aanmoet? Als je echt zo graag die data in 1 type wilt opsturen, dan maak je toch een nieuw record aan, bestaande uit de string en record. En van dit nieuwe recordtype kan je wel een array maken.

[edit]
het was me nog niet helemaal duidelijk dat je hem over het netwerk wilt versturen. Ik weet voor delphi hier geen oplossing voor (in java zou je het kunnen serializen, misschien dat delphi een soortgelijke oplossing heeft)

[ Voor 32% gewijzigd door Alarmnummer op 17-03-2003 21:58 ]


  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Even een detail erbij... ze moeten in een array van char/byte komen.

Door de string over te sturen en readln te doen gevolgend door readbuffer spilts ik ze juist op.

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 19-08 19:06
Ik weet niet hoe efficient dit moet gebeuren, maar als een 'vieze' oplossing ook volstaat kan je ook de twee ints naar string casten en met eoa. scheidingsteken de string versturen.
Ik kan geen delphi maar iets in deze vorm:
code:
1
2
3
strToSend = string + ":" + record.x.toString() + ":" + record.y.toString()
bToSend = strToSend.toBytes()
...rest...


Ik neem aan dat je wel een string naar bytes om kan toveren?

Natuurlijk wel zorgen dat het scheidingsteken niet in de andere string voor kan komen.

[ Voor 14% gewijzigd door Limhes op 17-03-2003 23:01 ]


  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Heb een andere 'vieze' oplossing....

Delphi:
1
2
3
    TempStr := 'HOI 0' + #13#10;
    StrCopy(@Buf, PChar(TempStr));
    Move(Hoi, Buf[8], SizeOf(Hoi));

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Waarom stop je de record en de string niet gewoon in een nieuw type record? Dan kan je heel simpel een array maken van dat record. Het probleem zit er m in het feit dat een LongString zoals je die hier gebruikt niets anders is dan een pointer. Het direct benaderen van een String in eer array dmv Move of MemCopy geeft de alleen pointer en niet de inhoud van de string. Je zou een ShortString kunnen gebruiken en aangeven wat de maximale lengte is. Dan kan je wel in 1x een heel stuk geheugen copieeren.

We adore chaos because we like to restore order - M.C. Escher

Pagina: 1