PChar转String问题

_菜菜 2013-06-08 01:06:08
Char 用StringOfChar 分配空间后,从别的地方接收到一串HEX数据
我用String := SetPas(Char)后,String中有数据,但是没有被引号引起来,再把它add到TMemo1中,TMemo1中什么都没有,怎么回事
...全文
643 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
_菜菜 2013-06-08
  • 打赏
  • 举报
回复
引用 14 楼 xhz8000 的回复:
唉! 我以为给你那个函数你会修改,原来不会啊! 再帮你写一个PChar版本吧 function TReceiveDataBase.ToHexString(HexBuf: PChar; BufSize: Integer): String; var iByte: Byte; iStart: Integer; begin iStart := 0; Result := ''; while iStart < BufSize do begin iByte := Byte(HexBuf[iStart]); if Result <> '' then Result := Result + IntToHex(iByte, 2) else Result := IntToHex(iByte, 2); iStart := iStart + 1; end; end;
嗯,我已经有好多年没用过delphi了,好多东西都忘的差不多了
xhz8000 2013-06-08
  • 打赏
  • 举报
回复
唉! 我以为给你那个函数你会修改,原来不会啊! 再帮你写一个PChar版本吧 function TReceiveDataBase.ToHexString(HexBuf: PChar; BufSize: Integer): String; var iByte: Byte; iStart: Integer; begin iStart := 0; Result := ''; while iStart < BufSize do begin iByte := Byte(HexBuf[iStart]); if Result <> '' then Result := Result + IntToHex(iByte, 2) else Result := IntToHex(iByte, 2); iStart := iStart + 1; end; end;
_菜菜 2013-06-08
  • 打赏
  • 举报
回复
引用 12 楼 xhz8000 的回复:
我记得把十六进制字符串转换为字节也给你写;把字节转换为十六进制字符也给你写了! 有了这两个函数你就可以互转了。
嗯,你给过我string转byte的,然后我再在收到的HEX是存在pchar中的,这怎么转?
xhz8000 2013-06-08
  • 打赏
  • 举报
回复
我记得把十六进制字符串转换为字节也给你写;把字节转换为十六进制字符也给你写了! 有了这两个函数你就可以互转了。
xhz8000 2013-06-08
  • 打赏
  • 举报
回复
我不知道怎么说了!
_菜菜 2013-06-08
  • 打赏
  • 举报
回复
引用 9 楼 xhz8000 的回复:
你不把十六进制数转换为十六进制字符串吗! 上一帖不是告诉你转换了吗??
你上一帖,那个函数返回的就是string,而且返回回来的string和hex完全不一样了
xhz8000 2013-06-08
  • 打赏
  • 举报
回复
你不把十六进制数转换为十六进制字符串吗! 上一帖不是告诉你转换了吗??
_菜菜 2013-06-08
  • 打赏
  • 举报
回复
引用 7 楼 xhz8000 的回复:
对了你的Buf:String; 要先! setlength(Buf, rlen);
数据是进到buf里了,不过原来的HEX数据,全都变成乱码了,怎么办?
xhz8000 2013-06-08
  • 打赏
  • 举报
回复
对了你的Buf:String; 要先! setlength(Buf, rlen);
_菜菜 2013-06-08
  • 打赏
  • 举报
回复
引用 5 楼 xhz8000 的回复:
move(Buf^, PChar(PBuf)^, rlen); 你写反了! move(PBuf^, PChar(Buf)^, rlen);
哦哦,没用过这个函数,都不知道怎么用啊
xhz8000 2013-06-08
  • 打赏
  • 举报
回复
move(Buf^, PChar(PBuf)^, rlen); 你写反了! move(PBuf^, PChar(Buf)^, rlen);
_菜菜 2013-06-08
  • 打赏
  • 举报
回复
引用 3 楼 xhz8000 的回复:
你贴一些必要的代码出来look look!
var id:thandle; rLen:LongInt; PBuf:PChar; Buf:String; begin Result := 0; if endrecvthread = true then exit; rlen := sio_iqueue(port); PBuf := PChar(StringOfChar(char(0),rlen+1)); rlen := sio_read(Port, PBuf, rlen); //从串口读入HEX数据 sio_flush(port,0); If rlen = 0 Then begin CreateThread(nil,0,@recvdata,nil,0,id); exit; end; move(Buf^, PChar(PBuf)^, rlen); form1.memo1.Text := form1.memo1.Text + buf; form1.memo1.SelStart := Length(form1.memo1.Text); form1.memo1.SelLength := 0; CreateThread(nil,0,@recvdata,nil,0,id); exit; end;
xhz8000 2013-06-08
  • 打赏
  • 举报
回复
你贴一些必要的代码出来look look!
_菜菜 2013-06-08
  • 打赏
  • 举报
回复
引用 1 楼 xhz8000 的回复:
move(Buf^, PChar(Str)^, ilen); 使用这个就有啦!
= =报错 pointer type required
xhz8000 2013-06-08
  • 打赏
  • 举报
回复
move(Buf^, PChar(Str)^, ilen); 使用这个就有啦!

5,392

社区成员

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

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