怎么修改这个程序?delphi的

来源:百度知道 编辑:UC知道 时间:2024/05/05 09:26:10
程序如下:
aa:=form1.mscomm1.input ;
bb := '';
for i := 1 to Length(aa) do
begin
bb := bb + IntToHex(Ord(aa[i]),2)+' ';
end;
这是一个接收串口信息的程序
如果发送AA 55 01 4F 4B 65能成功收到AA 55 01 4F 4B 65
但是如果发送AA FF 01 4F 4B 65却收到3F 01 4F 4B 65
这个错误可能是因为FF太大 超过了ASC码的最大值
请问有没有简单的办法修改下这个程序 使他能接收到FF?
谢谢
单独发送FF 没有问题
发送FF打头的数据也没有问题
FF在第三个字节也没有问题
只有FF在第二个字节时 例如 XX FF XX XX XX会把前两个字节 XX FF变成 3F 请问怎么回事啊?

var

i: integer;
aa,dd:string ;

begin
begin
if checkbox1.Checked
then

begin
aa := mscomm1.input;
dd := '';
for i := 1 to Length(aa) do
begin
dd := dd + IntToHex(Ord(aa[i]),2) + ' ' ;
end;
memo1.Text := dd;
end

输出length(...)结果在第二字节为FF时字节要少1 其他情况正常
例如 AA bb ff FF 01 4F 4B 65 长度8
AA ff FF 01 4F 4B 65 长度6

我没法重现你的现象,估计与你的aa定义的格式有关.

如果你定义的aa是ansi格式字串符,那么每个字节表示一个字符,
length(AA FF 01 4F 4B 65)-->长度为6;

而如果你定义的aa是unicode(或者其他编码)的话,AAFF可能会被当作一个unicode字符, 你可以输出length(...)看看结果

----------------------------------------------------------------

没有你的环境,检查不出来,你可以看一下关于length的帮助,沿着length结果向下找原因.

For single-byte (AnsiString) and multibyte strings, Length returns the number of bytes used by the string. For Unicode (WideString) strings, Length returns the number of bytes divided by two.