ord()不能多次出现?

yhp1234 2010-01-08 04:20:09
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i:integer;
rbuf:pchar;
lights: IntegerArray;
lightArrayTemp: array[0..3] of byte;
byteTemp: byte;
crct: Integer;
intTemp,intTemp1:Integer;
begin
viewstring:='' ;
move(buffer^,rbuf^,bufferlength);

for i:=1 to bufferlength do
viewstring:=viewstring+inttohex(ord(rbuf[i]),2)+'';
viewstring:='接收'+viewstring;
memo1.lines.add(viewstring);
memo1.lines.add('');

if (bufferlength<>7) or (inttohex(ord(rbuf[0]),2)<>'FF') then
begin
end
else
begin
/////////////////////////////////////////////////
intTemp:=ord(rbuf[1]) + ord(rbuf[2]);
intTemp1:=ord(rbuf[3]) + ord(rbuf[4]);
////上两句单独写都没问题,一起写就出错,怎么回事?
/////////////////////////////////////////////////
end;
end;
...全文
134 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzwcn 2010-01-08
  • 打赏
  • 举报
回复
要么把你的move(buffer^,rbuf^,bufferlength); 这句改成rbuf:=Pchar(Buffer);要么先用GetMem分配内存再move
wzwcn 2010-01-08
  • 打赏
  • 举报
回复
晕,你rbuf没分配内存也Move过去了,不出错才怪
yhp1234 2010-01-08
  • 打赏
  • 举报
回复
Comm1ReceiveData这是一个控件触发的事件
kfcoffe 2010-01-08
  • 打赏
  • 举报
回复
Comm1ReceiveData 你这个过程应该不止调用1此吧。
yhp1234 2010-01-08
  • 打赏
  • 举报
回复
1到7全都有值,没有越界
kfcoffe 2010-01-08
  • 打赏
  • 举报
回复
rbuf越界
bdmh 2010-01-08
  • 打赏
  • 举报
回复
应该是你的rbuf[i]的某个索引值为空所致,检查索引是否越界
yhp1234 2010-01-08
  • 打赏
  • 举报
回复
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00AA0EEB. Write of address 00000000'. Process stopped. Use Step or Run to continue.
kfcoffe 2010-01-08
  • 打赏
  • 举报
回复
还有这样的问题,mark。建议把错误提示贴出来

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧