AGB  ·  Datenschutz  ·  Impressum  







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

BinToHex Probleme

Ein Thema von delphinia · begonnen am 22. Jun 2011 · letzter Beitrag vom 23. Jun 2011
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#1

AW: BinToHex Probleme

  Alt 23. Jun 2011, 07:16
Wäre es nicht generell angesagt, nicht mit 2, sondern mit SizeOf(Char) zu multiplizieren? Dann muss man sich um die Ansi-/Unicode-Problematik keinen Kopf machen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.493 Beiträge
 
Delphi 12 Athens
 
#2

AW: BinToHex Probleme

  Alt 23. Jun 2011, 07:43
Sollte "Text" nicht um ein Zeichen länger sein, um mit einem abschließenden #0-Zeichen das Ende der Zeichenkette zu markieren?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#3

AW: BinToHex Probleme

  Alt 23. Jun 2011, 07:46
Laut Hilfe nicht (Unicode-Version):
Zitat:
BufSize legt die Größe von Buffer fest. Text muss auf eine Zeichenfolge zeigen, die mindestens 2*BufSize-Byte groß ist, da jedes Hexadezimalzeichen zwei Bytes darstellt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.493 Beiträge
 
Delphi 12 Athens
 
#4

AW: BinToHex Probleme

  Alt 23. Jun 2011, 09:06
Hier wird mit PAnsiChar gearbeitet:
Zitat:
Text gibt einen nullterminierten String zurück, der den in Buffer übergebenen Wert als Hexadezimalzahl darstellt.

BufSize legt die Größe von Buffer fest. Text muss auf eine Zeichenfolge zeigen, die mindestens 2*BufSize-Byte groß ist, da jedes Hexadezimalzeichen zwei Bytes darstellt.
Für die Funktion BinToHex mag das Nullzeichen am Ende egal sein (BuffSize wird ja übergeben).
Aber ShowMessage möchte sicher auch wissen, wie lang der übergebene Text ist.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#5

AW: BinToHex Probleme

  Alt 23. Jun 2011, 09:09
Bei solchen Dingen gehe ich persönlich immer auf Nummer Sicher und schreibe noch
SetLength(StringVar, StrLen(PChar(StringVar))); dahinter, bevor ich auf den ermittelten String zugreife.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
delphinia

Registriert seit: 16. Feb 2006
444 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: BinToHex Probleme

  Alt 23. Jun 2011, 15:08
habe nun drei stunden rumgespielt - versteh zwar nur die Hälfte; aber auch ein blinde Huhn findet mal ein Korn!


Das hier funktioniert, zumindest bis jetzt...

Delphi-Quellcode:
var
  Len: Integer;
  Buffer: array[0..4095] of Byte;
  txt: string;

begin
[....]
            Len := Reg.GetDataSize('Typename');
            if Len > 0 then
            begin
              Reg.ReadBinaryData('Typename', Buffer, SizeOf(Buffer));
              SetLength(txt, Min(Len, SizeOf(Buffer)) * 2);
              BinToHex(@Buffer, PChar(txt), Len);
            end;
            ShowMessage(txt);
ShowMessage enthält nun genau den richtigen String!

Mag das jemand mir mal jemand gegenprüfen ob das auch nicht nur in meinem hier vorliegendem Beispiel standhält?





EDIT:
Was bedeutet das @ in Delphi?
Was bedeutet das ^ in Delphi?

Frage nur da man danach schlecht hier oder bei Google suchen kann...
Doreen
Gruss Doreen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#7

AW: BinToHex Probleme

  Alt 23. Jun 2011, 15:19
@Var = Speicheradresse von Var
^Var = Zeiger auf Var
Var^ = Inhalt, der hinter dem Zeiger Var steckt
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#8

AW: BinToHex Probleme

  Alt 23. Jun 2011, 15:22
EDIT:
Was bedeutet das @ in Delphi?
Was bedeutet das ^ in Delphi?
Das sind Pointer-Operatoren:

@Foobar bedeutet „Die Adresse von Foobar im Speicher“ (Referenzierungsoperator)
Adresse^ bedeutet „Ding, das an dieser Adresse im Speicher steht“ (Dereferenzierungsoperator)
Achja, und ^Datentyp bedeutet „Zeiger auf einen Datentyp“. ^Integer wäre z.B. ein Zeiger auf einen Integer. Das braucht man zum dereferenzieren, damit der Compiler weiß, was für ein Typ sich überhaupt hinter einer Adresse verbirgt.

Für eine genauere Erklärung kannst du dir dieses Pointer-Tutorial aus der DP durchlesen.

Geändert von Namenloser (23. Jun 2011 um 16:18 Uhr)
  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 08:23 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-2025 by Thomas Breitkreuz