Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi was liefert HexToBin? (https://www.delphipraxis.net/73700-liefert-hextobin.html)

messie 22. Jul 2006 12:00


was liefert HexToBin?
 
Hallo,

ich wollte einen Hex-String in ein Format wandeln, was ich bitweise auswerten kann (Statuswort). Bei HexToBin bekomme ich Ergebnisse, die mir nicht verständlich sind:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  s : string;
  buffer: array[0..15] of Char;
begin
  s := 'ffff';
  HexToBin(PChar(s),buffer,SizeOf(Buffer));
end;
In Buffer stehen dann Werte die ich nicht verstehe. Die anderen Threads zum Thema haben keine Erklärung, die mir weiterhilft.

Wer kann erkären was in buffer steht?

Grüße, Messie

Dax 22. Jul 2006 12:03

Re: was liefert HexToBin?
 
Was steht denn im Buffer? Kanns sein, das die ersten zwei Chars #FF sind, und der Rest mehr oder weniger zufällig? Dann ists ganz simpel: du hast nur zwei Zeichen, wandelst aber 16 um. Der Computer nimmt sich also einfach die 14, die nach dem string sind.. Da hattest du bisher Glück, keine AVs zu haben. Eben immer nur so viele Zeichen umwandeln, wie da sind ;)

messie 22. Jul 2006 12:23

Re: was liefert HexToBin?
 
Zitat:

Zitat von Dax
Was steht denn im Buffer? Kanns sein, das die ersten zwei Chars #FF sind, und der Rest mehr oder weniger zufällig? Dann ists ganz simpel: du hast nur zwei Zeichen, wandelst aber 16 um. Der Computer nimmt sich also einfach die 14, die nach dem string sind.. Da hattest du bisher Glück, keine AVs zu haben. Eben immer nur so viele Zeichen umwandeln, wie da sind ;)

Ja, Du hast recht, ich habe mein Word in den ersten beiden Chars. Damit kann ich aber nicht gut weiterarbeiten. Gibt es keine Funktion die aus Hex einen Integer macht? Oder gibt es eine Funktion mit der ich das Ergebnis direkt bitweise verarbeiten kann?
Übrigens ist die OH für diese Funktion eher verwirrend als aufklärend.

Grüße, Messie

Dax 22. Jul 2006 12:24

Re: was liefert HexToBin?
 
Wenn deine Hexdaten höchstens 32bittige Ints repräsentieren, kannst du ein $ davorhängen und dann das ganze per IntToStr umwandeln.

Hawkeye219 22. Jul 2006 12:25

Re: was liefert HexToBin?
 
Hallo messie,

Die Funktion HexToBin füllt einen Puffer mit den Zeichen, deren Hex-Darstellung als String (mit Kleinbuchstaben!) im ersten Parameter übergeben werden:

Code:
'41424358595a' -> 'ABCXYZ'
Wie Dax schon angedeutet hat, wird die Anzahl der umgewandelten Zeichen durch die Länge des übergebenen Puffers und nicht durch den ersten Parameter bestimmt. Bei deinem Beispiel wären dies 16 Zeichen, obwohl du nur Hexcode für 2 Zeichen (2 x #$FF) übergibst.

Wenn du einen als String vorliegenden Hexwert bitweise auswerten möchtest, könntest du ihn zunächst in einer Integer-Variablen ablegen. Aus dieser lassen sich die einzelnen Bits leicht gewinnen:

Delphi-Quellcode:
var
  s : string;
  v : Integer;
  bit0 : Boolean;
  bit8 : Boolean;
  bit14 : Boolean;
begin
  s := 'ffff';
  v := StrToIntDef('$' + s, 0);
  bit0 := Odd(v {shr 0});
  bit8 := Odd(v shr 8);
  bit14 := Odd(v shr 14);
end;
Gruß Hawkeye

messie 22. Jul 2006 13:50

Re: was liefert HexToBin?
 
Zitat:

Zitat von Hawkeye219
Delphi-Quellcode:
s := 'ffff';
v := StrToIntDef('$' + s, 0);

Ja, genau das war es!

Grüße, Messie


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:38 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