请问16进制转换问题。(100分)

  • 主题发起人 主题发起人 runnerwise
  • 开始时间 开始时间
R

runnerwise

Unregistered / Unconfirmed
GUEST, unregistred user!
HexStr:='462D53C89C6DC';
如何算出HexStr的10进制的数字?采用StrToInt64('$'+HexStr)方式不对,算出的结果是'3C89C6DC'后面4字节的数字,为何HexStr长度有限制?
在计算器上'462D53C89C6DC'的10进制的值为'1234567890061020'。
高手解答!
 
太长了吧?那么大的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);
//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')]);
 
呵呵,int64还可以转呢!!!!!!!!
 
这个是昨天在Oracle中试的。
SQL写还麻烦些
 
ISqr := Trunc(IntPower(16, Length(Astr) - I));
是什么意思?
 
按照你的方法已经解决只是ISqr := Trunc(IntPower(16, Length(Astr) - I));
看不懂。
 
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);
//Form1.Memo1.Lines.Add(Format('C = %d, ISqr = %d ret = %s',
//[C, Isqr, IntToStr(Int64(ISqr * C))]));
//位权值相乘累加起来就是十进制整型了
Result := Result + ISqr * C;
 
后退
顶部