delphi spcomm组件中Comm1ReceiveData为什么接收不到短信啊

chuzhouzhaoyang 2011-10-02 02:40:04
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i:integer;
viewstring:string;
rbuf:array[0..2000] of byte;
begin
viewstring:='';
move(buffer^,pchar(@rbuf)^,bufferlength);
for i:=1 to bufferlength do
viewstring:=viewstring+inttohex(rbuf[i],2)+'';
//viewstring:='接收'+viewstring;
memo2.lines.add(viewstring);
end;
求高手解决,我用手机向tc35i发一个hello过后memo2出现了A169355452271253532449820DE108,哪位高手帮我修改下啊,另外想问一下缓存中接受到的是不是16进制的数据还是字符串啊,
...全文
450 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
chuzhouzhaoyang 2011-10-04
  • 打赏
  • 举报
回复
哪位大哥知道啊,我加分给他
chuzhouzhaoyang 2011-10-04
  • 打赏
  • 举报
回复
procedure Tform1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i:integer;
sbuf:array [1..2048] of byte;
viewstring:string;
begin
viewstring:='';
sleep(100);
setlength(viewstring,bufferlength);
Move(Buffer^,Pchar(@sbuf)^,BufferLength);
for i:=0 to BufferLength do
viewstring := viewstring + inttohex (sbuf[i], 2) + '';
memo2.lines.add(viewstring);
end;
他返回的是AT指令而不是AT指令的内容,例如 comm1.WriteCommData(pchar('AT+CMGR=2'+#13),length(pchar('AT+CMGR=2'+#13)));
memo2会显示AT+CMGR=2,却不显示读得短信内容
哪位高手解释下,拜托
广州佬 2011-10-03
  • 打赏
  • 举报
回复
不要这句: for i:=1 to BufferLength do viewstring:=viewstring+IntToHex(Ord(data[i]),2)+'';

执行结果?
广州佬 2011-10-03
  • 打赏
  • 举报
回复
viewstring+IntToHex 这样都转成十六进制字符了,这么是中文?按我的代码获得的是什么东西?
chuzhouzhaoyang 2011-10-03
  • 打赏
  • 举报
回复
大哥这样还是不能获的中文啊?是不是还要译码啊
chuzhouzhaoyang 2011-10-03
  • 打赏
  • 举报
回复
每次读取缓存的内容我都感觉不对,谁有能够接受短信的程序,网上那些都不管用。
hongss 2011-10-03
  • 打赏
  • 举报
回复
看看你的控件和事件是否关联了
chuzhouzhaoyang 2011-10-03
  • 打赏
  • 举报
回复
发送你好显示的是0DA1693554522712535324296A0A,大哥能不能加我QQ250823876,我在请教你
广州佬 2011-10-03
  • 打赏
  • 举报
回复
发了个控件给你,试试用我提供的来接收,若依然如故,检查你的硬件结构,如:有否漏了电平匹配(最方便的是使用max232模块),你的模块的电源滤波是否足够,连接点试试装个10k上拉电阻。
广州佬 2011-10-02
  • 打赏
  • 举报
回复
晕,还是有错,更正如下:
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word);
var i:integer;
viewstring,data:string;
begin
SetString(data,PChar(Buffer),BufferLength);
for i:=1 to BufferLength do viewstring:=viewstring+IntToHex(Ord(data[i]),2)+'';
memo2.text:=viewstring;
end;
广州佬 2011-10-02
  • 打赏
  • 举报
回复
Ord(data[1]) 请更正为 Ord(data[i])
广州佬 2011-10-02
  • 打赏
  • 举报
回复
buffer本身就是byte类型,何必这么费周折,获取数据可以这么写:
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word);
var i:integer;
viewstring,data:string;
begin
SetString(data,PChar(Buffer),BufferLength);
for i:=0 to BufferLength-1 do viewstring:=viewstring+IntToHex(Ord(data[1]),2)+'';
memo2.text:=viewstring;
end;

chuzhouzhaoyang 2011-10-02
  • 打赏
  • 举报
回复
自己顶
chuzhouzhaoyang 2011-10-02
  • 打赏
  • 举报
回复
顶,高手帮个忙

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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