Einzelnen Beitrag anzeigen

Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#1

Universale ToHex und FromHex procedure/function

  Alt 5. Mär 2007, 20:15
Hi @ll,

ich habe diese Funktionen geschrieben um ein set of xy abzuspeichern, aber eigentlich müssten diese Funktionen mit jedem "normalen" Datentyp funktionieren:+

Delphi-Quellcode:
function ToHex(data: PChar; bytes: integer):string;
var i: integer;
    res: string;
begin
  setlength(res, bytes*2);
  res :='';
  for i:=1 to bytes do
  begin
    res :=res+IntToHex(byte(data^),2);
    inc(data);
  end;
  result :=res;
end;

procedure FromHex(data: PChar; hex: string);
var i: integer;
begin
  for i:=0 to length(hex) div 2-2 do
  begin
    if i>=1 then inc(data);
    data^ :=char(StrToInt('$'+hex[i*2+1]+hex[i*2+2]));
  end;
end;
Anwendungsbeispiel:
Delphi-Quellcode:
procedure Beispiel;
var str: string;
    aSet; set of byte;
begin
  aSet :=[1,2,3,109,250];
  str :=ToHex(@aSet,sizeof(aSet));

  //Jetzt kann man str gemütlich in einer Datei speichern und später wieder laden:

  FromHex(@aSet,str);
end;
Natürlich solltet iohr gewarnt sein, dass man sich mit diesen zwei Funktionen auch was kaputt machen kann, wenn beispielsweise byte inkorrekt übergeben wurde oder man versucht mit FromHex In eine Variable zu schreiben, die zu klein ist um die Daten aufzunehmen.
Ausserdem könnt ihr die Funktion natürlich nur auf Variabeln anweden, die hintereinander weg im ram sind. Das auf ein Objekt anzuwenden könnte lustige Effekte haben.
Ausserdem bewart euch diese Funktion auch nicht vor Inkompatibilitäten zwsischen Systemen. Ein integer auf einem 64bit-System hat... naja... eben 64 bit und auf einem 32 bitsystem nur 32. Beim Speichern von einem Integer auf 64 bit und laden auf 32 bit kann also auch lustige Effekte haben. Umgekehr natürlich genauso, nur dass ihr umgekehrt wahrscheinlich deutlich länger brauchen werdet, bis ihr den Bug gefunden habt.

Aber wenn ihr wisst, was ihr tut, könnten diese zwei Funktionen durchaus nützlich sein .
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat