Registriert seit: 31. Aug 2006
248 Beiträge
Delphi 7 Professional
|
AW: Smartcard auslesen, Kommandos senden
9. Nov 2011, 20:18
Zitat:
kleiner Tipp?
hier einfach + '$' und gegf. +' ' rausnehmen?
Delphi-Quellcode:
Function Hexit(const s:AnsiString):String;
var
i:Integer;
begin
Result := '';
for I := 1 to Length(s) do Result := Result +'$' +IntToHex(Byte(s[i]),2) +' ';
end;
in #21 hatte ich geschrieben
Zitat:
InterpretInbuffer; // Eine Prozedur die den Puffer auswertet, komplette Nachrichten extrahiert, aus dem Puffer entfernt und verarbeitet
so würde ich es machen ...
das mit den '$' hat schon mal geklappt
InterpretInbuffer meinst du so?
Delphi-Quellcode:
procedure Tfrm_main.InterpretInbuffer;
var
i:Integer;
part:AnsiString;
begin
i := Pos(#10,FInBuffer);
Memo1.Lines.Add(FInBuffer);
while i>0 do
begin
Part := Copy(FInBuffer,1,i-1);
FInBuffer := Copy(FInBuffer,i+1,Length(FInBuffer));
Memo2.Lines.Add(Part);
i := Pos(#10,FInBuffer);
end;
end;
und dann so
Delphi-Quellcode:
procedure Tfrm_main.ComPortRxChar(Sender: TObject; Count: Integer);
var
s:AnsiString;
begin
ComPort.ReadStr(s,Count);
FInBuffer := FInBuffer + s; // globale variable
InterPretInbuffer;
end;
Wird aber dann in im Memo1 blos das:
Delphi-Quellcode:
;Ÿ!IRDETO ACS
;Ÿ!IRDETO ACS„Uÿ€m
angezeigt. Kannst du das ein bischen erklären mit den InterPretInbuffer ?
Nachtrag: Hexausgabe hab ich berichtigt, wenns so korrekt ist
Delphi-Quellcode:
procedure Tfrm_main.InterpretInbuffer;
var
i:Integer;
part:AnsiString;
begin
i := Pos(#10,Hexit(FInBuffer));
Memo1.Lines.Add(Hexit(FInBuffer));
while i>0 do
begin
Part := Copy(Hexit(FInBuffer),1,i-1);
FInBuffer := Copy(Hexit(FInBuffer),i+1,Length(Hexit(FInBuffer)));
Memo1.Lines.Add(Part);
i := Pos(#10,Hexit(FInBuffer));
end;
end;
Gruß: Holger
[Hobby-Programmierer]
Geändert von newuser01 ( 9. Nov 2011 um 20:31 Uhr)
|
|
Zitat
|