Hallo, ich habe folgende Bin2Hex-Funktion geschrieben, aber die scheint nicht ganz zu funktionieren. Könnt ihr mir sagen was dabei der Fehler ist?
Hinweis: Aus z.B. i:integer=511 soll s:string='000001FF' werden.
Die Hex2Bin-Funktion schneidet vom zu lesenden String die gelesenen Bytes ab.
Delphi-Quellcode:
const
hexes:string='0123456789ABCDEF';
function mybin2hex(const data;size:integer):string;
var
bytes:array of byte;
i:integer;
begin
setlength(bytes,size);
fillchar(bytes[0],length(bytes),#0);
copymemory(@bytes[0],@data,size);
result:='';
for i:=0 to length(bytes)-1 do begin
result:=result+hexes[1+(bytes[i] div 16)];
result:=result+hexes[1+(bytes[i] mod 16)];
end;
setlength(bytes,0);
end;
//Ermitteln welchen Index der Char im String hat. (C in '0123456789ABCDEF' => 12)
function indexof(s:string;c:char):integer;
var
i:integer;
begin
result:=0;
for i:=1 to length(s) do
if s[i]=c then
begin
result:=i;
exit;
end;
end;
procedure myhex2bin(var data; hex:string; const size:integer);
var
bytes:array of byte;
i:integer;
workwith:string;
begin
workwith:=copy(hex,1,size*2);
hex:=copy(hex,size*2,length(hex)-size*2);
setlength(bytes,length(workwith) div 2);
for i:=0 to (length(workwith) div 2)-1 do
bytes[i]:=indexof(hexes,workwith[i*2])*16+indexof(hexes,workwith[i*2+1]);
copymemory(@data,@bytes,length(bytes));
setlength(bytes,0);
end;
In Realität kommen aber lauter falsche Werte raus (jedes mal dasselbe, hex2bin schneidet String nicht ab)
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates