PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Terminal Problem


Marek Swierzy
05.08.2002, 14:33
Hallo zusammen...
ich habe mir ein Terminal system gebaut.
Es gibt ein Progblem ich kann damit nur Ascii zeichen versenden.
Ich möchte jedoch auch HEx zeichen versenden.
Jedoch auf eine Speziele ART.
Beispiel :
123<32>
Die 123 sollen als Ascii versendet werden. Der INHALT DER <>
soll als Hex versendet werden !
mein Quell sieht bis jetzt so aus :

procedure TForm1.Button4Click(Sender: TObject);
var
W: DWord;
P: Pointer;
s : String;
begin
s := Edit1.Text;
P:= @s; // P zeigt auf den String
WriteFile(hComm, P^, Length(s), W, nil);
end;

Wie gesagt die ZEICHEN werden als ASCII versendet.
Wie müste ich den quell umbauen damit ich ascii und hex senden könnte !

THX
MAREK SWIERZY


DerWolf
05.08.2002, 19:57
ich würd ma so ganz schnell die function schreiben:
function TForm1.HexToChar (s: string): string;
var tmp, hex: string;
i: integer;
begin
tmp := '';
i := 0;
while (i < Length(s)) do
begin
hex := '';
while (s[i+1] <> '<') and (i < Length(s)) do
begin
inc(i);
tmp := tmp + s[i];
end;
inc(i);
while (s[i] <> '>') and (i < Length(s)) do
begin
hex := hex + s[i];
inc(i);
end;
tmp := tmp + Hex_Char(hex);
end;
result := tmp;
end;

function TForm1.Hex_Char (hex: string): char;
var c: char;
begin
if hex = '' then
result := char($00)
else
begin
// Hexstring in Char um wandeln
result := c;
end;
end;
hab grad net im Kopf wie man Hexcode in Char umwandelt. muss ich noch nachschaun. dein code würd ich dann so umändern:
procedure TForm1.Button4Click(Sender: TObject);
var
W: DWord;
P: Pointer;
s : String;
begin
s := HexToChar(Edit1.Text);
P:= @s; // P zeigt auf den String
WriteFile(hComm, P^, Length(s), W, nil);
end; und feddich :) (geb zu schaut net toll aus)

Lord_Otter
05.08.2002, 20:46
Die Funktion Hex_Char verstehe ich nicht ganz.
Warum hast du c deklariert ?
Du hast es ja nie verwendet:

function TForm1.Hex_Char (hex: string): char;
var c: char; // c wird nie ein Wert zugewiesen
begin
if hex = '' then
result := char($00)
else
begin
// Hexstring in Char um wandeln
result := c; // c ist kein Wert zugewiesen
end;
end;

Ist das ein Fehler oder hab' ich da was nicht kapiert ?

DerWolf
05.08.2002, 21:01
jo, da fehlt mir auch noch der code zum umwandeln den ich im moment net weiß. c is dann einfach die charvariable die zurückgegeben wird :)function TForm1.Hex_Char (hex: string): char;
var c: char; // c = Char nach der Umwandlung
begin
if hex = '' then
result := char($00)
else
begin
// <--- Hier Code für Umwandlung einfügen
// 'c' erhält dann den CharWert
result := c;
end;
end;

vieleicht besser so, danke für den tip :)

Lord_Otter
06.08.2002, 07:27
Jetzt hab' ich es verstanden.:)

Marek Swierzy
06.08.2002, 15:01
Danke Jungs,
Ihr seid die wenigen dir mir helfen können;
ich habe euren source übernommen doch leider funtzt das nicht so ganz....
ich weiß auch nicht warum.
Ich habe auch eine String to Char umwandlung gemacht .
Noch ein Hinweis. Das gertät das ich ansteuern will funtzt nur mit STX und ETX.
DANKE

DerWolf
06.08.2002, 17:48
So nochmal den ganzen Code (nen Bug rausgetan :)) und die Hex->Char Umwandlung funzt auch :) mir is heut bei der arbeit eingefallen das StrToInt() einen String der eine Hexzahl darstellt ja gleich in ne dezimalzahl umrechnet *g*:

function TForm1.Hex_Char (hex: string): char;
var c: char;
begin
if hex = '' then
result := char($00)
else
begin
c := char(StrToInt('$'+hex));
result := c;
end;
end;

function TForm1.HexToChar (s: string): string;
var tmp, hex: string;
i: integer;
begin
tmp := '';
i := 0;
while (i < Length(s)) do
begin
hex := '';
while (s[i+1] <> '<') and (i < Length(s)) do
begin
inc(i);
tmp := tmp + s[i];
end;
inc(i,2);
while (s[i] <> '>') and (i < Length(s)) do
begin
hex := hex + s[i];
inc(i);
end;
tmp := tmp + Hex_Char(hex);
end;
result := tmp;
end;

sonst noch was was nich geht?

Marek Swierzy
07.08.2002, 17:37
THX es funzt !
VIELEN DANK JUNGS