求一个可以把16进制字符串转为数值的函数(包括正数和负数)
例: FFFF=-1
0047=71
例: FFFF=-1
0047=71
解决方案 »
- Delphie 如何写Cookie
- 小问题急
- 哪里有delphi工作流图形源码下载,载完立刻给分!不够再开贴送分!
- ADODataSet重复使用,出现“在对应所需名称或序数的集合中,未找到项目。”的错误提示,代码如下
- WM_IME_COMPOSITION 消息怎么用啊?
- 我现在想知道用ADOQUERY查询出的数据和视图怎样修改
- 10台机器以内的局域网,用2层好还是3层好?
- 我的程序在运行时出错了,请高手指点!!!(万分着急呀!!!!)
- 如何象memo内容中的","都替换成"."呢,谢谢.
- 用Tquery查询二个表放入dbgrid中,对其修改,如果查询语句里有in就不能修改,为何,如何修改???????
- 一个有点难度的问题:如何去MP3原声?(问题解决后加分)
- 送些分求好心人改一下一小段代码
我要的是字符串FFFF转成数值-1
用inttostr不可以啊!
{十六进制转换为十进制}
function HexToInt(const aHex: string): Integer;
var
I,L,K: Integer;
begin
Result := 0;
if aHex = '' then Exit;
K := 0;
L := Length(aHex);
for I:=1 to L do
begin
if (not(aHex[I] in['A'..'F'])) and (not(aHex[I] in['a'..'f'])) then
K := K + Trunc(StrToInt(aHex[I]) * Power(16, L-I))
else
case aHex[I] of
'a', 'A' : K := K + Trunc(10 * Power(16, L-I));
'b', 'B' : K := K + Trunc(11 * Power(16, L-I));
'c', 'C' : K := K + Trunc(12 * Power(16, L-I));
'd', 'D' : K := K + Trunc(13 * Power(16, L-I));
'e', 'E' : K := K + Trunc(14 * Power(16, L-I));
'f', 'F' : K := K + Trunc(15 * Power(16, L-I));
end;
end;
Result := K;
end;
我需要的是FFFF=-1 而不是FFFF=65535
var temp:integer;
begin
try
temp:=StrToInt('$'+s);
except
showmessage('输入的不是有效16进制数!');
abort;
end;
if temp<=32767
then result:=temp
else if temp<65536
then
result:=temp-65536
else
begin
showmessage('数值超出范围!');
abort;
end;
end;
smallint(StrToInt('$'+s))就解决了。