当前位置:主页>仓库管理软件> 列表

请问16进制转换问题。 找财务软件免费版

仓库管理软件版1楼: HexStr:=''462D53C89C6DC'';
如何算出HexStr的10进制的数字?采用StrToInt64(''$''+HexStr)方式不对,算出的结果是''3C89C6DC''后面4字节的数字,为何HexStr长度有限制?
在计算器上''462D53C89C6DC''的10进制的值为''1234567890061020''。
高手解答!

2楼: 太长了吧?那么大的16进制。
uses Math;

function TransChar(AChar: Char): Integer;
begin
if AChar in [''0''..''9''] then
Result := Ord(AChar) - Ord(''0'')
else
Result := 10 + Ord(AChar) - Ord(''A'');
end;

//十六进制字符串转换成十进制整型
function HexToInt(Astr: string): Int64;

var
I: Integer;
C: Integer;
ISqr: Int64;
begin
Result := 0;
for I := 1 to Length(Astr) do
begin
ISqr := Trunc(IntPower(16, Length(Astr) - I));
C := TransChar(AStr[I]);
//Form1.Memo1.Lines.Add(Format(''C = %d, ISqr = %d ret = %s'',
//[C, Isqr, IntToStr(Int64(ISqr * C))]));
Result := Result + ISqr * C;
end;
end;
试试
caption := format(''%d'', [HexToInt(''462D53C89C6DC'')]); 如财务软件免费版

3楼: 呵呵,int64还可以转呢!!!!!!!!

4楼: 这个是昨天在Oracle中试的。
SQL写还麻烦些

5楼: ISqr := Trunc(IntPower(16, Length(Astr) - I));
是什么意思?

6楼: 按照你的方法已经解决只是ISqr := Trunc(IntPower(16, Length(Astr) - I));
看不懂。

仓库管理软件版7楼: ISqr := Trunc(IntPower(16, Length(Astr) - I));
是什么意思?你看看数制系统就会很明白的,各进制转换类似。
//IntPower 取16''n次平方根, Trunc取整,
//Length(Astr) - 1)是因为采用原始的转换算法,取16进制位权值
ISqr := Trunc(IntPower(16, Length(Astr) - I));
//取16进制每位对应的数值
C := TransChar(AStr[I]);
//Form1.Memo1.Lines.Add(Format(''C = %d, ISqr = %d ret = %s'',
//[C, Isqr, IntToStr(Int64(ISqr * C))]));
//位权值相乘累加起来就是十进制整型了
Result := Result + ISqr * C;