You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 08:50:43