• 主页
  • 招聘
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API

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;
...全文
143 点赞 收藏 9
写回复
9 条回复
浮生若梦_平淡为真 2010年04月28日
一个字 顶 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来发送即可
回复 点赞
不若人生一场醉 2010年04月28日
没太看明白楼主的意思,所有数据都是以字节为单位发送的,不管是发送的字符串还是数字或是文件,writebuff和writestream没有什么区别,因为所有字节的发送都是以流方式发送,数据最终要写入流中发出去,writebuff和writestream只不过是参数不一样,根据需要哪个方便就用哪个
回复 点赞
发动态
发帖子
Delphi
创建于2007-08-02

1474

社区成员

26.2w+

社区内容

Delphi 开发及应用
社区公告
暂无公告