AGB  ·  Datenschutz  ·  Impressum  







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

Cast Array[0..x] of Byte in TBytes

Ein Thema von schwa226 · begonnen am 29. Jun 2011 · letzter Beitrag vom 30. Jun 2011
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#11

AW: Cast Array[0..x] of Byte in TBytes

  Alt 30. Jun 2011, 12:38
Das gilt sicher für die Nutzdaten, ...
Genau aus diesem Grund wäre ein Cast möglich, aber nur andersrum.

TBytes nach Array[0..x] of Byte läßt sich Casten, da die nötigen Daten des statischen arrays im dynamischen enthalten sind, solange das dynamische Array mindestens so groß ist, wie das Statische.
Aber in diesem Fall kommt man um ein Umkopieren nicht drumrum.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#12

AW: Cast Array[0..x] of Byte in TBytes

  Alt 30. Jun 2011, 13:03
Der TIdIOHandler nimmt aber auch u.a. Streams an. Ich habe mir vor einiger Zeit schon eine kleine Klasse von TCustomMemoryStream abgeleitet, der ich im Konstruktor einen bereits bestehenden Puffer - wie z.B. ein statisches Array - und dessen Länge übergeben kann. So wandelt man irgendwelche Daten ohne umkopieren in einen Stream
Ob es hier aber nicht vlt. einfacher und sinnvoller wäre, den aufrufenden Code an TBytes anzupassen, kann ich nicht beurteilen.
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#13

AW: Cast Array[0..x] of Byte in TBytes

  Alt 30. Jun 2011, 13:14
@Uwe Raabe:

Die Nutzdaten haben das selbe Layout: Einfach 1024 Bytes hintereinander. Die Verwaltungsinformationen (auf die Delphi intern zugreift) sind für diese Speicherbereiche unterschiedlich.
Und im konkteten Fall der Write-Methode sind nur die Nutzdaten relevant. Genau aus diesem Grund muß ja auch die Länge des Speicherbereichs mit übergeben werden. Und damit ist ein Typecast im Gegensatz zu Deiner Behauptung im konkreten Falle sehr wohl möglich.

Sorry - aber es wie im Kindergarten...
Jeder will hier auf Biegen oder Brechen Recht behalten. Ist irgendwie lächerlich und schade um die vergeudete Zeit..

Und wie überflüssig das Ganze ist, sieht man am Beitrag des Fragestellers: Es hat bei ihm (im speziellen Fall) funktioniert. Auch bei ReportMemoryLeaksOnShutdown:=true; treten (bei mir) keine Speicherfehler auf.

Aber die Theoretiker beharren auf ihrer Meinung...


@Deep-Sea:

Interessante Idee!
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom (30. Jun 2011 um 13:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#14

AW: Cast Array[0..x] of Byte in TBytes

  Alt 30. Jun 2011, 13:33
Auch wenn ich mich ungern in die Schussbahn einer so hitzigen Diskussion begebe, wollte ich es trotzdem los werden:
Es hat bei ihm (im speziellen Fall) funktioniert.
Die zweite Zeile in AContext.Connection.IOHandler.Write sieht so aus: LLength := IndyLength(ABuffer, ALength, AOffset); .
Und die zweite Zeile der Funktion IndyLength enthält wiederum das: LAvailable := IndyMax(Length(ABuffer)-AIndex, 0); Hier wird also auf die Länge des dyn. Arrays mittels Length zugegriffen. Das das gut geht ist reine Glückssache ...
Dein Code funktioniert also, sofern man die Funktion selbst geschrieben hat und auf Length verzichtet. Allgemein ist es aber leider eine tickende Zeitbombe ...
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#15

AW: Cast Array[0..x] of Byte in TBytes

  Alt 30. Jun 2011, 13:43
PS: Ist denn unbedingt ein statisches Array notwendig?

Einfach TBytes nehmen und am Anfang ein SetLength(a, 1000); und schon kann man das Array direkt übergeben.

Wenn irgendwo, in deinem Code, sowas wie @a vorkommt, dann dieses durch @a[0] ersetzen und das Selbe auch noch bei Var-Parametern.


Zitat:
Länge des Speicherbereichs
Man gibt nicht die Länge des Speicherbereichs, sondern den Abschnitt in dem Array an, welchen man versenden will und dieses wird dann nochmal von Indy geprüft, wobei es natürlich auf die originalen Daten zugreift.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (30. Jun 2011 um 13:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#16

AW: Cast Array[0..x] of Byte in TBytes

  Alt 30. Jun 2011, 13:46
[...] dann dieses durch @a[0] ersetzen [...]
Oder besser gleich immer @a[Low(a)] schreiben, dann passt es immer, auch für statische Arrays die nicht mit 0 beginnen
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#17

AW: Cast Array[0..x] of Byte in TBytes

  Alt 30. Jun 2011, 14:38
Hier wird also auf die Länge des dyn. Arrays mittels Length zugegriffen. Das das gut geht ist reine Glückssache ...
Dein Code funktioniert also, sofern man die Funktion selbst geschrieben hat und auf Length verzichtet. Allgemein ist es aber leider eine tickende Zeitbombe ...
Das akzeptiere ich ohne Widerspruch!
Deshalb ja auch meine Bemerkung
Ein Typecast ist sehr wohl möglich. Ob er auch sinnvoll ist, steht auf einem ganz anderen Blatt...
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom (30. Jun 2011 um 14:42 Uhr)
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#18

AW: Cast Array[0..x] of Byte in TBytes

  Alt 30. Jun 2011, 14:39
Es ist also von Dir absolut überflüssig, in einer derart belehrenden Art und Weise zu schreiben und andere für dumm zu halten.
Ich sehe in meinem Post nur einen sachlichen Hinweis. Was Du alles da rein interpretierst ist mir schleierhaft.
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#19

AW: Cast Array[0..x] of Byte in TBytes

  Alt 30. Jun 2011, 14:55
Ich weiß nicht, wie alt Du bist und ob Du viel mit andere Menschen zu tun hat (Kinder, Schüler, Praktikanten, Angestellte,...).
Ist aber eigentlich auch egal: Aus meiner Sicht ist oftmals der Ton wichtiger als der Inhalt. Und genau dieser Umgangston läßt in vielen Foren arg zu wünschen übrig...
Aber das ist Offtopic: Wenn Du Interesse hat, können wir das auch gern per PM besprechen.
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#20

AW: Cast Array[0..x] of Byte in TBytes

  Alt 30. Jun 2011, 15:02
Hallo....

nu kommt doch bitte auf den Boden zurück. Können wir uns darauf einigen, daß Typecasting ein ganz heißes Eisen ist, und daß man damit sehr zurückhaltend und vorsichtig umgehen sollte?
(und Pointer gehören in die gleiche Kathegorie?)

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 17:37 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