一個關于StrPCopy問題。

DelphiDu 2003-08-23 11:50:57
我碰到一個關于StrPCopy比較棘手的問題﹐煩請各位高手指點。
程序主要過程如下﹕
function ReadComm(hPort:THandle; ReadData:PChar; ReqReadNum : Cardinal):Boolean;stdcall;
var
Buf_data: Array[1..100]of char;
S: String;
buf:PChar;
str1:String;
j:integer;
begin
ReadFile(hPort, Buf_Data, Coms.cbInQue, Coms.cbInQue, @lpol);
S:=S+Copy(Buf_Data, 1, Coms.cbInQue);
StrPCopy(ReadData, S);
for j := 0 to StrLen(ReadData)-1 do
BEGIN
str1 := str1+' '+IntToHex(ord(ReadData[j]),2);
END;
end;
當我用了StrPCopy指令后﹐
正確的str1結果應該是:81 81 81 01 00 00 05,但現在執行的結果是:81 81 81 01,把00后面的結果切掉了﹐應該如何使用才能得到我想要的結果﹖
...全文
99 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
stephenng 2003-09-11
  • 打赏
  • 举报
回复
沒有辦法﹐改用string類型。
lxpbuaa 2003-08-23
  • 打赏
  • 举报
回复
直接对S操作就可以了:
//去掉:StrPCopy(ReadData, S);
for j := 1 to Length(S) do
BEGIN
str1 := str1+' '+IntToHex(ord(S[j]),2);
END;

—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
baguli 2003-08-23
  • 打赏
  • 举报
回复
补充一下:StrLen也是返回到最后一个非'\0'字符的串长度
lxpbuaa 2003-08-23
  • 打赏
  • 举报
回复
因为ReadData中含有空字符,也就是对应于“81 81 81 01 00 00 05”中的“00”。因为PChar是以空字符作为结束标记的,所以ReadData最后是“81 81 81 01”,后面的被忽略了

—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————。
baguli 2003-08-23
  • 打赏
  • 举报
回复
StrPCopy遇到'\0'字符就会返回,将其改为CopyMemory就不会出错
DelphiDu 2003-08-23
  • 打赏
  • 举报
回复
To: lxpbuaa(桂枝香在故国晚秋)
如果不想去掉﹕strpcopy(raddata,s)這一行呢﹐有其它解決方法嗎﹖

5,386

社区成员

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

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