inttohex;
inttostr
strtoint('$'+hexstr)

解决方案 »

  1.   

    访问计算机地址和串口,建议在delphi中嵌入汇编语言。
      

  2.   

    各位大哥好:
    我要的是十六进制转对浮点型的转换,可用strtofloat总出错
    我需要这样一个功能函数:
    将一个标准的浮点型十六进制数表示为十进制数
    例如0xC1480000转化位十进制数是-12.5
    浮点型数字的格式为一个4字节的二进制数(9位阶码,23 位尾码)
    函数的的参数是一个字符串(例如"C1480000"),返回值是一个十进制数(例如-12.5)
    拜托,拜托
      

  3.   

    function HexToInt(Exp: String): Word;
    var
      Len: Byte;
      I: Integer;
      Base: Word;
      S: String;
    begin
      Result := 0;
      Base := 1;
      Len := Length(Exp);
      S := UpperCase(Exp);  for I := Len downto 1 do
      begin
        if not (S[I] in ['0'..'9', 'A'..'F', '$', 'H', 'h']) then
        begin
          raise Exception.Create(Format('不能将%s转换为十进制数字。', [Exp]));
          Exit;
        end;
        if S[I] in ['$', 'h', 'H'] then Continue;
        if S[I] in ['0'..'9'] then
            Result := Result + (Ord(S[I])-Ord('0')) * Base
        else
            Result := Result + (Ord(S[I])-Ord('A')+10) * Base;    Base := Base * 16;
      end;
    end;
      

  4.   

    unit com_io;interfaceuses SysUtils;const
    ti_fast=1; (* 0.001 s*)
    ti_slow=500; (* 0.5 s*)
    type
    Tcom=(com1,com2);
    Tbaud=(_9k6,_19k2,_38k4);
      ExCom= class(exception);
    procedure open_com(port: Tcom);
    procedure set_com(rate: Tbaud);
    procedure set_fast_timing;
    procedure set_slow_timing;
    procedure set_buf(len_in, len_out: longint);procedure putb(b: byte; var ok: boolean);
    procedure getb(var b: byte; var ok: boolean);procedure putb_ex(b: byte);
    procedure getb_ex(var b: byte);procedure puta(a: array of byte; var len: integer);
    procedure geta(var a: array of byte; var len: integer);procedure close_com;implementationuses windows;const
      cbr: array [Tbaud] of DWORD  =(CBR_9600,CBR_19200,CBR_38400);
    cport: array [Tcom] of string =('COM1','COM2');
    var is_open: boolean = false;
    com: Thandle;
    DCB: TDCB;
    timeouts: TCommTimeouts;
    procedure open_com(port: Tcom);
    begin
    if is_open then closeHandle(com);
      com := CreateFile(PChar(cport[port]), GENERIC_READ or GENERIC_WRITE,
      0, nil, OPEN_EXISTING,
      FILE_ATTRIBUTE_NORMAL, 0);
    if com>0 then is_open:=true else raise Excom.Create('open_com');
    end;procedure set_buf(len_in, len_out: longint);
    begin
    if not SetupComm(com, len_in, len_out) then raise Excom.Create('set_buf');
    end;
    procedure set_com(rate: Tbaud);
    (* press Ctrl-F1 on following keyword: SetComState *)
    begin
    DCB.DCBlength:=SizeOf(Tdcb);
      DCB.BaudRate:= cbr[rate];
      DCB.Flags:=12305;
      DCB.wReserved:=0;
      DCB.XonLim:=6553;
      DCB.XoffLim:=65535;
      DCB.ByteSize:=8;
      DCB.Parity:=0;
      DCB.StopBits:=0;
      DCB.XonChar:=#17;
      DCB.XoffChar:=#19;
      DCB.ErrorChar:=#0;
      DCB.EofChar:=#0;
      DCB.EvtChar:=#0;
      DCB.wReserved1:=65;
      if not SetCommState(com, DCB) then raise Excom.Create('set_com');
    end;procedure set_fast_timing;
    (* press Ctrl-F1 on following keyword: commtimeouts *)
    (* I had problems with MAXWORD, 0, 0 configuration  *)
    begin
    timeouts.ReadIntervalTimeout:=1;
      timeouts.ReadTotalTimeoutMultiplier:=0;
      timeouts.ReadTotalTimeoutConstant:=1;
      timeouts.WriteTotalTimeoutMultiplier:=2;
      timeouts.WriteTotalTimeoutConstant:=2;
      if not SetCommTimeouts(com,timeouts) then raise Excom.Create('set_timeout');
    end;procedure set_slow_timing;
    begin
    timeouts.ReadIntervalTimeout:=2;
      timeouts.ReadTotalTimeoutMultiplier:=10;
      timeouts.ReadTotalTimeoutConstant:=500;
      timeouts.WriteTotalTimeoutMultiplier:=2;
      timeouts.WriteTotalTimeoutConstant:=2;
      if not SetCommTimeouts(com,timeouts) then raise Excom.Create('set_timeout');
    end;procedure putb(b: byte; var ok: boolean);
    var res: integer;
    begin
    WriteFile(com, b, 1, res, nil);
    ok:=(res=1);
    end;procedure getb(var b: byte; var ok: boolean);
    var res: integer;
    begin
    ReadFile(com, b, 1, res, nil);
    ok:=(res=1);
    end;procedure putb_ex(b: byte);
    var res: integer;
    begin
    WriteFile(com, b, 1, res, nil);
    if (res<>1) then raise ExCom.Create('put byte');
    end;procedure getb_ex(var b: byte);
    var res: integer;
    begin
    ReadFile(com, b, 1, res, nil);
    if (res<>1) then raise ExCom.Create('get byte');
    end;procedure puta(a: array of byte; var len: integer);
    var res: integer;
    begin
    WriteFile(com, a, len, res, nil);
    len:=res;
    (* before call puta: len=bytes-to-put
       after  call puta: len=bytes-transmitted *)
    end;procedure geta(var a: array of byte; var len: integer);
    var res: integer;
    begin
    ReadFile(com, a, len, res, nil);
    len:=res;
    (* after  call geta: len=bytes-received *)
    end;
    procedure close_com;
    begin
    if not is_open then CloseHandle(com);
    is_open:=false;
    end;end.
      

  5.   

    to yibin(张) 
    谢谢
    您是否知道怎样转换浮点数,我在vc中找到方法但我想在delphi中也找到方法
    还有一点是如何将一个十六进制字符串换为数字型(浮点或整形)
    解决了,我马上奉分
      

  6.   

     Read_Buffer[22]:=$AA; //16进制 asm
      mov    dx,$2FC   //MCR:0x3FC
      in     al,dx
      or     al,$02     //RTS=1
      out    dx,al
      nop
      nop
     end; fillchar( Write_Event, 0, sizeof( OVERLAPPED ) );
       Write_Event.hEvent:=CreateEvent(nil,false,false,nil);
       bWriteStat := WriteFile(hcom,temp,Num,dwBytesWritten,@Write_Event);