首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-03-09 
IdTCPClient,怎么将一个16进制的串转换为BYTE类型发送function TDM_client.sendTranData(scmData: String)

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;

[解决办法]

Delphi(Pascal) code
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来发送即可

热点排行