![]() |
Delphi-Version: 5
BinToHex Probleme
Hallo habe einen Binary< Wert in der Registry
diesen will ich umwandeln:
Delphi-Quellcode:
Das funktioniert auch soweit nur ist in "Text" der Wert PLUS einem * am Ende wo kommt das her?
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; der Binary Wert ist := 00 00 11 00 Was ich damit bezwecke will den Binary in DWORD umwandeln bzw halt in Integer |
AW: BinToHex Probleme
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 |
AW: BinToHex Probleme
Delphi-Quellcode:
Kommts immernoch?! Falls nein, dann hast du nen Fehler - GetMem(Text, BufferSize) wäre dann die Ausbesserung!
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; |
AW: BinToHex Probleme
@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; |
AW: BinToHex Probleme
Delphi-Quellcode:
Da Text ein PAnsiChar ist, sollte das Füllen dann nicht auch mit
GetMem(Text, BufferSize * 2);
FillChar(Text^, BufferSize, #0);
Delphi-Quellcode:
arbeiten?
BufferSize * 2
Delphi-Quellcode:
.
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. |
AW: BinToHex Probleme
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.
|
AW: BinToHex Probleme
Sollte "Text" nicht um ein Zeichen länger sein, um mit einem abschließenden #0-Zeichen das Ende der Zeichenkette zu markieren?
|
AW: BinToHex Probleme
Laut Hilfe nicht (Unicode-Version):
Zitat:
|
AW: BinToHex Probleme
Hier wird mit PAnsiChar gearbeitet:
Zitat:
Aber ShowMessage möchte sicher auch wissen, wie lang der übergebene Text ist. |
AW: BinToHex Probleme
Bei solchen Dingen gehe ich persönlich immer auf Nummer Sicher und schreibe noch
Delphi-Quellcode:
dahinter, bevor ich auf den ermittelten String zugreife.
SetLength(StringVar, StrLen(PChar(StringVar)));
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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 by Thomas Breitkreuz