PChar转String问题

_菜菜 2013-06-08 01:06:08
Char 用StringOfChar 分配空间后,从别的地方接收到一串HEX数据
我用String := SetPas(Char)后,String中有数据,但是没有被引号引起来,再把它add到TMemo1中,TMemo1中什么都没有,怎么回事
...全文
165 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
_菜菜 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); 使用这个就有啦!
回复
相关推荐
发帖
Delphi
创建于2007-08-02

4925

社区成员

Delphi 开发及应用
申请成为版主
帖子事件
创建了帖子
2013-06-08 01:06
社区公告
暂无公告