AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi [Erledigt] Frage zur speicherung in den speicher
Thema durchsuchen
Ansicht
Themen-Optionen

[Erledigt] Frage zur speicherung in den speicher

Ein Thema von dazar_t · begonnen am 26. Mär 2008 · letzter Beitrag vom 27. Mär 2008
Antwort Antwort
dazar_t

Registriert seit: 1. Dez 2007
Ort: NRW
118 Beiträge
 
Delphi 2007 Professional
 
#1

[Erledigt] Frage zur speicherung in den speicher

  Alt 26. Mär 2008, 20:10
Guten Tag

Habe hier mal eine kurtze verständniss frage. Ich arbeite grade das Biär Protokoll Tutorial von Narses durch.

Nur eine frage beantwortet mir das tutorial nicht, was aber eine grundlegenheit des tutorials darstell.

der Code schnipsel
PInteger(@Buffer[1])^ := Also ich verstehe dies zwar aber warum wird das alles in den speicher geschrieben und nicht einfach
Buffer[1] := so veararbeitet ?

MfG
Daniel
Mit freundlichen Grüßen
__________________________________________________ ______
Ein Programm ist nur so gut wie sein entwickler.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: kurtze verständniss frage

  Alt 26. Mär 2008, 22:55
Wie wäre es denn, wenn du das Tutorial verlinken würdest? Ich weiss nun überhaupt nicht wie der Buffer[] definiert ist.

Aber grundlegend. Ich nehme an, dass Buffer ein Array of Byte oder vllt. ein String ist. Wenn dem so ist, dann greifst du mit Buffer[1] auf ein Element zu. Bei der ersten Vermutung also auf ein Byte, bei der zweiten Vermutung auf ein Zeichen (char). Beides ist aber jeweils nur ein Byte gross und somit deutlich kleiner als der Code zuvor. Der sagt nämlich, gib mir die Adresse des ersten Zeichens ( @Buffer[1] ) und interpretiere das nun nicht als einen Zeiger auf ein Char (bzw. Byte), sondern interpretiere das als Zeiger auf einen Integer ( PInteger(@Buffer[1]) ). Und zum Schluss sagt er mit dem ^, dass er nicht den Zeiger haben will, sondern dass wodrauf er zeigt ( PInteger(@Buffer[1])^ ) (nennt sich dereferenzieren). Im Endeffekt macht er nichts anders, also Buffer[1], Buffer[2], Buffer[3] und Buffer[4] zusammen als ein Integer zu interpretieren, weil im Speicher kommen die alle linear hinter Buffer[1] und somit greift er durch den Integertyp (Integer = 4 Byte bei 32 Bit Compilern) auf alle 4 gleichzeitig zu und erhält somit den 4 Byte, anstatt nur das erste Byte.

Ein Zeiger referenziert eine Speicherstelle. Mit anderen Worten: ein Zeiger hat nur die Adresse, wo die Daten liegen. Das ist wie der Names deines Freundes. Du kannst dir überlegen mit wem du heute Abend was unternehmen willst. Wenn du dich entschieden hast, dann könntest du zwei Dinge tun:

1. Du schnappst dir deinen Freund und schleppst ihn den ganzen Tag mit dir mit, bis ihr dann abends weggeht, oder:
2. Du merkst dir einfach eine Referenz auf deinen Freund: Seinen Namen.

Letzteres ist deutlich einfacher und er kann noch was machen bis dahin. Ist bei Pointer fast ähnlich. Sie wissen nur die Adresse der Daten, die Daten aber liegen an der Adresse. Somit musst du dereferenzieren um zu sagen, du willst das haben, was an der Adresse steht an Daten und nicht die Adresse an sich.

Ich hoffe das war verständlich...

/EDIT: alles erklärte bleibt bestehen, ich habe nur gesehen, dass der Code nicht das Auslesen sondern das Zuweisen der Daten betrachtet hatte. Somit alles wie gehabt, nur die Datenverschiebung geschieht anders herum...
  Mit Zitat antworten Zitat
dazar_t

Registriert seit: 1. Dez 2007
Ort: NRW
118 Beiträge
 
Delphi 2007 Professional
 
#3

Re: kurtze verständniss frage

  Alt 26. Mär 2008, 23:12
Dankeschön dies war sehr verständlich !

Aber eine frage hätte ich noch. was würde den PInteger(@BinMessage[1])^ bei diesem Code beispiel zurückliefern, und in welcher form ?!
Delphi-Quellcode:
var
BinMessage: String;
begin
SetLength(BinMessage, 4);
PInteger(@BinMessage[1])^ := Length(Edit1.Text);
Also so wie ich das verstanden habe müsste in BinMessage jetzt in Binär form die length von Edit1.Text setehen oder ?
Daniel
Mit freundlichen Grüßen
__________________________________________________ ______
Ein Programm ist nur so gut wie sein entwickler.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: kurtze verständniss frage

  Alt 26. Mär 2008, 23:18
Naja, er setzt den String auf eine Länge von 4 Zeichen. Danach lässt er diese 4 Zeichen als Integer interpretieren um dann die Länge des Edit1.Text darin abzulegen. Nun ja, angenommen in Edit1 steht "Hallo Welt", dann schreibt er diese 10 da hinein. Mit anderen Worten: Du hast danach einen String, welcher folgendes als Inhalt hat: #0#0#0#10. Also dreimal ein Nullbyte und einmal ein Zeichen mit dem ASCII Code von 10.
  Mit Zitat antworten Zitat
dazar_t

Registriert seit: 1. Dez 2007
Ort: NRW
118 Beiträge
 
Delphi 2007 Professional
 
#5

Re: kurtze verständniss frage

  Alt 26. Mär 2008, 23:25
wenn ich diese in Hex umwandeln würde würde doch 0A 00 00 00 herauskommen oder ?

EDIT// DANKE SCHÖN DIE FRAGE IST NUN GEKLÄRT
Daniel
Mit freundlichen Grüßen
__________________________________________________ ______
Ein Programm ist nur so gut wie sein entwickler.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: kurtze verständniss frage

  Alt 27. Mär 2008, 09:00
Moin dazar,

schön, dass die Frage geklärt ist.
Eine Bitte für die Zukunft: Nutze doch aussagekräftige Thementitel, dann wissen auch Dritte gleich, worum es bei Deinem Anliegen geht.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
dazar_t

Registriert seit: 1. Dez 2007
Ort: NRW
118 Beiträge
 
Delphi 2007 Professional
 
#7

Re: [Erledigt] Frage zur speicherung in den speicher

  Alt 27. Mär 2008, 12:37
o.K

Die Frage ist zwar schon geklärt aber als guten vorsatz habe ich diesen thread title auch schon geändert

MfG
Daniel
Mit freundlichen Grüßen
__________________________________________________ ______
Ein Programm ist nur so gut wie sein entwickler.
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:42 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