我编的是一个mscomm和单片机通讯的程序:(instring、a[i]、b[j]都是string型)
  instring:=mscomm1.Input           
  a[i]:=copy(instring,i,1);
  b[j]:=inttostr(strtoint('$a[2*j]'));
  用inttostr(strtoint('$a[2*j]'))这个办法把缓冲区的十六进制字符转换为
  十进制,
  结果弹出“Debugger Exception Notification”,
  说:''$a[2*i]' is not a valid integer value'。
  问题出在哪?
  用这个办法是不是不能转换??
  哪个高手教教我??

解决方案 »

  1.   

    to:netwolfds(晓竹) 
    按你的方法还是不行啊,还是弹出“Debugger Exception Notification”,
                说:''$♂' is not a valid integer value'。
      

  2.   

    是你的a[2*j]不对,我不知道你的instring是一串什么数,但看你的程序你是一个一个copy出来的,你直接用ord(a[i][1])就可以了
      

  3.   

    我的instring是有八个字节,包含四个检测点的数据
    一个检测点数据有两个字节,一个符号字,一个数据字,
    比如“-F”,表示零下15度。是八进制的
      

  4.   

    那b[j]:=inttostr(strtoint('$'+a[2*j]));应该没有错。
    inttostr(strtoint('$'+'F'))='15'
    你应该看看a[2*j]的数对不对
      

  5.   

    根据你前一次的错''$♂' is not a valid integer value'。
    说明a[2*j]='♂'.并不是一个16进制数
      

  6.   

    看一看你喜欢那种
    No.1
    function HexToInt(const asHex: string; aiDefault: Integer): Integer;
    begin
      Result := StrToIntDef('$' + asHex, aiDefault);
    end;
    No.2
    function IntToBinX(const aiDec: Integer; abWithLeadingZero: Boolean = False): string;
    begin
      Result := IntToBin(aiDec); //IdGlobal.pas is necessary here.
      if abWithLeadingZero then
        Exit;
      while (Length(Result) > 1) and  (Result[1] = '0') do
      begin
        Delete(Result, 1, 1 );
      end;
    end;
    No.3
    ledtHex.Text := Format('%x', [iASCii])
    No.4
    function BinToInt(asBin: string): LongInt;
    var
      i: Integer;
    begin
      Result := 0;
      for i := 1 to Length(asBin) do
      begin
        Result := Result shl 1;
        if asBin[i] = '1' then
        begin
          Result := Result + 1;
        end;
      end;
    end;