Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zahl in Hex Wert, Hex in Byte, Byte in Zahl (https://www.delphipraxis.net/150298-zahl-hex-wert-hex-byte-byte-zahl.html)

user0815 13. Apr 2010 08:11


Zahl in Hex Wert, Hex in Byte, Byte in Zahl
 
Muss Zahlen in deren Hex Wert zerlegen, aus 9999 wird somit 270F, aus 100 wird 0064, diesen Wert als Byte speichern und nach Datenübertragung wieder zusammensetzen. Ich nutze hierzu folgenden Code.

Geht das auch besser ?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Buf : array [0..1] of Byte;
  s : String;
begin
// zur Übertragung
  s := IntToHex(StrToInt('9999'), 4);
  ShowMessage(s);

// Datenübertragung muss als BYTE Wert erfolgen
  Buf[0] := StrToIntDef('$' + s[1] + s[2], 0);
  Buf[1] := StrToIntDef('$' + s[3] + s[4], 0);

// nach Übertragung
  s := Format('%.2x', [Buf[0]]) + Format('%.2x', [Buf[1]]);
  s := IntToStr(StrToInt('$' + s));

  ShowMessage(s);
end;
/edit: Muss als Byte übertragen werden

himitsu 13. Apr 2010 08:22

Re: Zahl in Hex Wert, Hex in Byte, Byte in Zahl
 
Wozu wandelst du denn mehrfach um, bei de Rückwandlung?

- 4x-Hex kommem an
- wird von dir in 2x Byte umgewandelt
- dann wieder in 2x 2x-Hex
- zusammengesetzt zu einem 4x-Hex

- und dann nochmal zusammen in einen Integer (Word)

Da kann man so Einiges (grau) weglassen.

PS: Eine Prüfung ob der Hex-String OK war, wäre vielleicht auch keine Schlechte Idee

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i : Integer;
  s : String;
begin
  i := 4

  // umwandeln
  s := IntToHex(StrToInt('9999'), i);

  // s übertagen
  ShowMessage(s);

  // umwandeln
  if TryStrToInt('$' + s, i) then
  begin
    // i wurde empfangen
    ShowMessage(IntToStr(i));
  end else
    ShowMessage('Fehler');
end;
oder villeicht gleich noch den Wertebereich mit prüfen
Delphi-Quellcode:
* ...

  // umwandeln
  if TryStrToInt('$' + s, i) and (i >= 0) and (i <= $FFFF) then
  begin
    // i wurde empfangen
    ShowMessage(IntToStr(i));
  end else
    ShowMessage('Fehler');
end;


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