usart, ComPort i funkcja ORD

0

Witam,

Odczytuję string z USART przez ComPort w taki sposób:

procedure TForm1.ComDataPacket1Packet(Sender: TObject; const Str: string);
begin
     Form1.Memo1.Lines.Add(IntToStr(Ord(Str[1])) +' '+ IntToStr(Ord(Str[2])) +' '+ IntToStr(Ord(Str[3])));
end;

A dostaję liczby, które są większe o 255. Bardzo często to jest coś w okolicach 8200:

215 382 8249
220 8211 131
83 357 8225
220 8211 8225
215 378 352
77 357 8225

Co mam nie tak? :(

0

czyżby unicode? Masze debugger więc podejrzyj na żywca co siedzi w str

0

właśnie, że dostaję chyba normalne stringi, np:

¸ ™'#0#0#0'˙˙˙˙

jŚ›'#0#0#0'˙˙˙˙

Terminal widzi je jako:

216 173 147 000 000 000 255 255 255 255

204 171 147 000 000 000 255 255 255 255

Więc znaki dochodzą dobrze.
Problem tkwi w ich zamianie na liczbę.

to nie działa:
x1:=Ord(char(str[1]));

to też nie:
x1:=Ord(str[1]);

Cóż to może być? :-/

0

Znalazłem!
Wrzucam odpowiedz dla potomnych:

stringa trzeba przerobic na ansistring.
Wtedy mozna zastosowac Ord().

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0