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
Seite 1 von 2  1 2      
delphinia

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

BinToHex Probleme

  Alt 22. Jun 2011, 15:22
Delphi-Version: 5
Hallo habe einen Binary< Wert in der Registry

diesen will ich umwandeln:


Delphi-Quellcode:
            BufferSize := Reg.GetDataSize('Typename');
            GetMem(Buffer, BufferSize);
            GetMem(Text, BufferSize * 2);
            try
               Reg.ReadBinaryData('Typename', Buffer^, BufferSize);

              BinToHex(Buffer, Text, BufferSize);
            finally
              FreeMem(Text);
              FreeMem(Buffer);
            end;
Das funktioniert auch soweit nur ist in "Text" der Wert PLUS einem * am Ende wo kommt das her?

der Binary Wert ist := 00 00 11 00

Was ich damit bezwecke will den Binary in DWORD umwandeln bzw halt in Integer
Doreen
Gruss Doreen
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: BinToHex Probleme

  Alt 22. Jun 2011, 16:07
Also zu nächst würde mich das Ergebnis interessieren, ist das x04,x4,04 oder 12 oder 0C oder was?
Dann frage ich mich mit welchenPuffergrößen Du arbeitest.
für ein Byte benötigst Du 8 Bit = 8 Zeichen. in der Hexadezimaldarstellung solltest Du aber mit 2 Zeichen auskommen, und nicht die doppelte Menge benötigen.
Und woher weißt Du denn was in "Text" steht?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: BinToHex Probleme

  Alt 22. Jun 2011, 16:09
Delphi-Quellcode:
            BufferSize := Reg.GetDataSize('Typename');
            GetMem(Buffer, BufferSize);
            GetMem(Text, BufferSize * 2);
            FillChar(Text^, BufferSize, #0);
            try
               Reg.ReadBinaryData('Typename', Buffer^, BufferSize);

              BinToHex(Buffer, Text, BufferSize);
            finally
              FreeMem(Text);
              FreeMem(Buffer);
            end;
Kommts immernoch?! Falls nein, dann hast du nen Fehler - GetMem(Text, BufferSize) wäre dann die Ausbesserung!
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
delphinia

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

AW: BinToHex Probleme

  Alt 22. Jun 2011, 16:17
@Aphton

ja


das hier ist meine komplette procedure:

Delphi-Quellcode:
var

  Buffer, Text: PAnsiChar;
  BufferSize: Integer;
  reg: TRegistry;
begin
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;

    if reg.OpenKey('\Software\MikroFil', false) then
    begin

      if (reg.ValueExists('Typename')) then
        if (reg.GetDataType('Typename') = rdBinary) then
        begin
          BufferSize := Reg.GetDataSize('Typename');
          GetMem(Buffer, BufferSize);
          GetMem(Text, BufferSize * 2);
          FillChar(Text^, BufferSize, #0);
          try
            Reg.ReadBinaryData('Typename', Buffer^, BufferSize);
            BinToHex(Buffer, Text, BufferSize);
          finally
            ShowMessage(Text); <----------------- Hier habe ich dann den * am Ende des sonst richtigen Wertes
            FreeMem(Text);
            FreeMem(Buffer);
          end;
        end;
    end;
  finally
    FreeAndNil(reg);
  end;
Doreen
Gruss Doreen
  Mit Zitat antworten Zitat
Satty67

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

AW: BinToHex Probleme

  Alt 22. Jun 2011, 21:25
Delphi-Quellcode:
GetMem(Text, BufferSize * 2);
FillChar(Text^, BufferSize, #0);
Da Text ein PAnsiChar ist, sollte das Füllen dann nicht auch mit BufferSize * 2 arbeiten?

FillChar(Text^, BufferSize * 2, #0); .

Sonst füllt man ja nur den Bereich, der sowieso mit den richtigen Daten gefüllt wird und kann garnicht testen, ob im Puffer mehr liegt.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#6

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.429 Beiträge
 
Delphi 10.4 Sydney
 
#7

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.540 Beiträge
 
Delphi 11 Alexandria
 
#8

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.429 Beiträge
 
Delphi 10.4 Sydney
 
#9

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.540 Beiträge
 
Delphi 11 Alexandria
 
#10

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
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 02:13 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