IdTCPClient,怎么将一个16进制的串转换为BYTE类型发送

zsjzwj 2010-04-27 11:48:44
function TDM_client.sendTranData(scmData: String): String;
begin
if not IdTCPClient1.Connected then
begin
try
IdTCPClient1.Connect;
except
Exit;
end;
end;
try
//问题从这里开始的********************************************************
//从这里开始 scmdata 是要发送的16进制字串 比如是:343032343431393439353830303030
//下面需要将 scmdata 字串转换为字节数据发送出去
//IdTCPClient1.Write

//Result := IdTCPClient1.CurrentReadBuffer();
// 通讯结束
finally
IdTCPClient1.Disconnect;
end;
end;
...全文
311 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
一个字 顶 2个字 支持
周药师 2010-04-28
  • 打赏
  • 举报
回复
“是要发送的16进制字串 比如是:343032343431393439353830303030”
你这个里是ASCII,转换成16进制 402441949580000 然后转换成byte数组
通过WriteBuffer 发出去就行了
merrymin 2010-04-28
  • 打赏
  • 举报
回复
字符串转换成字节已经好了
关于IdTCPClient1发送数据出去该如何发送我也不是很清楚哦,等待大牛们来解决吧
zsjzwj 2010-04-28
  • 打赏
  • 举报
回复
发送数据是使用IdTCPClient1.WriteBuffer还是IdTCPClient1.WriteStream呢,
var
scmdatabyte: array of byte;

这里数组类型也不能直接发送的
merrymin 2010-04-28
  • 打赏
  • 举报
回复

SetLength(scmdatabyte, Trunc(Length(scmdata) / 2));
for i = 0 to Trunc(Length(scmdata) / 2) - 1 do
begin
scmdatabyte[i] := StrToInt('$' + scmdata[2 * i + 1] + scmdata[2 * i + 2]);
end;
merrymin 2010-04-28
  • 打赏
  • 举报
回复

function TDM_client.sendTranData(scmData: String): String;
var
scmdatabyte: array of byte;

begin
if not IdTCPClient1.Connected then
begin
try
IdTCPClient1.Connect;
except
Exit;
end;
end;
try
//问题从这里开始的********************************************************
//从这里开始 scmdata 是要发送的16进制字串 比如是:343032343431393439353830303030
//下面需要将 scmdata 字串转换为字节数据发送出去
//一个字节是8位,16进制字符串每个字符时4位,也就是每个字节存两个字符,外加一个“$”,如"$34"
SetLength(scmdatabyte, Trunc(Length(scmdata) / 2));
for i = 0 to Trunc(Length(scmdata) / 2) - 1 do
begin
scmdatabyte[i] := StrToInt('$' + scmdata[2 * i] + scmdata[2 * i + 1]);
end;
//IdTCPClient1.Write

//Result := IdTCPClient1.CurrentReadBuffer();
// 通讯结束
finally
IdTCPClient1.Disconnect;
end;
end;


差不多思路就是这个样子的,程序可能写得不完善
hongqi162 2010-04-28
  • 打赏
  • 举报
回复
建一个byte buffer,然后分析你的字符串插入这个buffer,然后使用writebuff来发送即可
  • 打赏
  • 举报
回复
没太看明白楼主的意思,所有数据都是以字节为单位发送的,不管是发送的字符串还是数字或是文件,writebuff和writestream没有什么区别,因为所有字节的发送都是以流方式发送,数据最终要写入流中发出去,writebuff和writestream只不过是参数不一样,根据需要哪个方便就用哪个

5,928

社区成员

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

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