inttohex;
inttostr
strtoint('$'+hexstr)
inttostr
strtoint('$'+hexstr)
解决方案 »
- 怎么样做到让程序GET时判断转向问题
- 高手请进,继承了一个TSPEEDBUTTON的按钮,想切掉其个角也就是想变换圆角的区域。该怎么做?
- 如何在treeview的每一项前加一checkbox.
- 关于猫的问题,,,,大哥行行好啊!!!!!!!!!!!!!!
- 急急!! 关于speedbutton 问题
- 图象识别,我是新手,不懂术语,大侠请进
- csdn中没有高手了吗?????
- --------------数据库高手专区------------
- 如何调用winapi函数
- 请进来看看我的程序:将一个表中的内容移到另一个表中(字段不完全移动),怎么出现行数不对呢
- delphi6创建的数据库模块出现的窗体怎么和delphi5不同?
- 如何能在 query的sql语句中判断某一个表已经存在?
我要的是十六进制转对浮点型的转换,可用strtofloat总出错
我需要这样一个功能函数:
将一个标准的浮点型十六进制数表示为十进制数
例如0xC1480000转化位十进制数是-12.5
浮点型数字的格式为一个4字节的二进制数(9位阶码,23 位尾码)
函数的的参数是一个字符串(例如"C1480000"),返回值是一个十进制数(例如-12.5)
拜托,拜托
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;
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.
谢谢
您是否知道怎样转换浮点数,我在vc中找到方法但我想在delphi中也找到方法
还有一点是如何将一个十六进制字符串换为数字型(浮点或整形)
解决了,我马上奉分
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);