IdTCPClient,怎么将一个16进制的串转换为BYTE类型发送
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;
[解决办法]
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 字串转换为字节数据发送出去 [color=#FF0000]//一个字节是8位,16进制字符串每个字符时4位,也就是每个字节存两个字符,外加一个“$”,如"$34"[/color] 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;
[解决办法]
“是要发送的16进制字串 比如是:343032343431393439353830303030”
你这个里是ASCII,转换成16进制 402441949580000 然后转换成byte数组
通过WriteBuffer 发出去就行了
[解决办法]
一个字 顶 2个字 支持
[解决办法]
没太看明白楼主的意思,所有数据都是以字节为单位发送的,不管是发送的字符串还是数字或是文件,writebuff和writestream没有什么区别,因为所有字节的发送都是以流方式发送,数据最终要写入流中发出去,writebuff和writestream只不过是参数不一样,根据需要哪个方便就用哪个
[解决办法]
建一个byte buffer,然后分析你的字符串插入这个buffer,然后使用writebuff来发送即可