Delphi 7超长十六进制字符串转十进制字符串解决方案求助
40位十六进制字符串转十进制字符串的Delphi解决方案
方案一:Delphi 7原生实现
由于Delphi 7无内置大整数类型,可通过字符串模拟大整数运算实现转换,核心逻辑是逐位处理十六进制字符,对十进制字符串反复执行「乘16加当前十六进制位数值」操作,手动处理进位。
以下是完整实现代码:
function HexCharToValue(c: Char): Integer; begin c := UpCase(c); if c in ['0'..'9'] then Result := Ord(c) - Ord('0') else if c in ['A'..'F'] then Result := 10 + Ord(c) - Ord('A') else raise Exception.Create('无效的十六进制字符'); end; function HexToDecimalString(const HexStr: string): string; var i: Integer; CurrentVal: Integer; Carry: Integer; DecimalLen: Integer; TempChar: Char; begin Result := '0'; for i := 1 to Length(HexStr) do begin CurrentVal := HexCharToValue(HexStr[i]); Carry := 0; DecimalLen := Length(Result); // 从后往前遍历十进制字符串,执行乘16加值操作 for DecimalLen := DecimalLen downto 1 do begin TempChar := Result[DecimalLen]; Carry := (Ord(TempChar) - Ord('0')) * 16 + CurrentVal + Carry; CurrentVal := 0; // 仅首次叠加当前十六进制位数值 Result[DecimalLen] := Char(Ord('0') + (Carry mod 10)); Carry := Carry div 10; end; // 处理剩余进位 while Carry > 0 do begin Result := Char(Ord('0') + (Carry mod 10)) + Result; Carry := Carry div 10; end; end; end; // 测试示例 procedure TestConversion; var HexInput: string; DecimalOutput: string; begin HexInput := '6F000080B4D4B3426C66A655010001000080B4'; DecimalOutput := HexToDecimalString(HexInput); // 输出应为:2475382888117010136950089026926167642744062132 ShowMessage(DecimalOutput); end;
代码说明:
HexCharToValue:将单个十六进制字符转换为0-15的整数HexToDecimalString:逐位处理十六进制字符串,通过字符串操作模拟大整数运算,适配任意长度的十六进制输入
方案二:Delphi 2010导出DLL供Delphi 7调用
复用字符串转换算法,在Delphi 2010中编译为DLL,供Delphi 7项目调用。
1. Delphi 2010端DLL实现
library HexToDecimalDLL; uses SysUtils; function HexCharToValue(c: Char): Integer; begin c := UpCase(c); if c in ['0'..'9'] then Result := Ord(c) - Ord('0') else if c in ['A'..'F'] then Result := 10 + Ord(c) - Ord('A') else raise Exception.Create('无效的十六进制字符'); end; function HexToDecimalString(const HexStr: PChar): PChar; stdcall; var i: Integer; CurrentVal: Integer; Carry: Integer; DecimalLen: Integer; TempChar: Char; DecimalStr: string; begin DecimalStr := '0'; for i := 1 to StrLen(HexStr) do begin CurrentVal := HexCharToValue(HexStr[i]); Carry := 0; DecimalLen := Length(DecimalStr); for DecimalLen := DecimalLen downto 1 do begin TempChar := DecimalStr[DecimalLen]; Carry := (Ord(TempChar) - Ord('0')) * 16 + CurrentVal + Carry; CurrentVal := 0; DecimalStr[DecimalLen] := Char(Ord('0') + (Carry mod 10)); Carry := Carry div 10; end; while Carry > 0 do begin DecimalStr := Char(Ord('0') + (Carry mod 10)) + DecimalStr; Carry := Carry div 10; end; end; // 分配内存返回结果,调用方需负责释放 Result := StrNew(PChar(DecimalStr)); end; exports HexToDecimalString name 'HexToDecimalString'; begin end.
2. Delphi 7端调用DLL
在Delphi 7项目中声明并调用DLL函数:
function HexToDecimalString(const HexStr: PChar): PChar; stdcall; external 'HexToDecimalDLL.dll'; procedure TestDLLConversion; var HexInput: string; DecimalOutput: PChar; begin HexInput := '6F000080B4D4B3426C66A655010001000080B4'; DecimalOutput := HexToDecimalString(PChar(HexInput)); try // 输出转换结果 ShowMessage(DecimalOutput); finally // 释放DLL返回的内存 StrDispose(DecimalOutput); end; end;
内容的提问来源于stack exchange,提问作者Ehab
相关产品推荐
相关产品推荐

