在书上看到一个类似串口调试助手的例题:
钩选"十六进制发送"按钮
在发送程序中,这样写:
var
tmpstr:string;
tmpint:integer;
tmpvar:variant;
i:=1;
count:=1;
tmpvar:=vararraycreate([1,1],varbyte);    //此处如何解释?
output中存放待发送数据
while(i<Len) do
begin
tmpstr:=copy(output,i,2);
tmpInt:=HexToInt(tmpstr);  //钩选十六进制发送按钮,请问,为何要将待发送的数据OUTPUT,tmpInt:=HexToInt(tmpstr);
              //为何要换为Int型赋值给MSComm.output:=tmpvar; 
tmpvar[count]:=tmpInt;  //此句如何解释?
Inc(count);
vararrayredim(tmpvar,count); 
i:=i+3;
endMSComm.output:=tmpvar;     

解决方案 »

  1.   


    var 
    tmpstr:string; 
    tmpint:integer; 
    tmpvar:variant; 
    i:=1; 
    count:=1; 
    tmpvar:=vararraycreate([1,1],varbyte);    //此处如何解释?{创建一个varbyte类型数组} 
    output中存放待发送数据 
    while(i <Len) do 
    begin 
    tmpstr:=copy(output,i,2); 
    tmpInt:=HexToInt(tmpstr);  //钩选十六进制发送按钮,请问,为何要将待发送的数据OUTPUT,{转成16进制发送}tmpInt:=HexToInt(tmpstr); 
                  //为何要换为Int型赋值给MSComm.output:=tmpvar;{为了下面的赋值} 
    tmpvar[count]:=tmpInt;  //此句如何解释? {给tmpvar[count]赋值}
    Inc(count); 
    vararrayredim(tmpvar,count);  
    i:=i+3; 
    end MSComm.output:=tmpvar;   
      

  2.   

    谢谢1楼的回复
    tmpInt:=HexToInt(tmpstr); 您的解释为://{转成16进制发送}
    在串口调试助手中,我们一般发送数据的格式为:0x05 0x06 0x07
    tmpInt:=HexToInt(tmpstr)后,变为5*16=80;6*16=96;7*16=112;
    tmpvar[count]:=tmpInt;  // {给tmpvar[count]赋值}
    请问:
    1)MSComm.inputmode中有2中模式:Text mode ; Binary mode
    请问,16进制发送和Binary mode有何关系?
    2)16进制发送,为何要将0x05(字符串)这种形式转换为80(整型)的形式进行?
    3)给tmpvar[count]的赋值有何要求?
    4)另:如果,不以16进制发送,又以何种形式给MScomm.output赋值?小弟初涉,还请指教!谢谢!