Delphi 如何将十进制字符串的基数转换为另一个基数?

Delphi 如何将十进制字符串的基数转换为另一个基数?,delphi,delphi-7,Delphi,Delphi 7,这是我的密码 {Sayitabani=orginal base, SonucTabani=result-converted base} function SayiCevir(Sayi:String;const SayiTabani,SonucTabani:Word):String; function ChToRkm(const C:Char):Byte; var B:Byte absolute C;{c ile b aynı adresteki değişkenlerdir. c:='B'

这是我的密码

{Sayitabani=orginal base, SonucTabani=result-converted base}
function SayiCevir(Sayi:String;const SayiTabani,SonucTabani:Word):String;
 function ChToRkm(const C:Char):Byte;
 var B:Byte absolute C;{c ile b aynı adresteki değişkenlerdir. c:='B' olursa b değeri 66 olur veya b:=65 olursa c değeri 'A' olur}
 begin
   if C>='A' then Result:=B-55 else Result:=B-48;
 end;
 function RkmToCh(B:Byte):Char;
 var C:Char absolute B;
 begin
   if B>9 then B:=B+55 else B:=B+48;
   Result:=C;
 end;
const AltSinir=1; UstSinir=35;
var i,j:Integer; fSayi,Basamak:Int64;
begin
  //if (SayiTabani=SonucTabani) then Result:=Sayi else
  if (SayiTabani<=AltSinir) or (SonucTabani<AltSinir) or (SayiTabani>UstSinir) or (SonucTabani>UstSinir) then
   raise Exception.CreateFmt('%d tabanındaki sayı %d tabanına çevrilmek isteniyor fakat desteklenen taban aralığı %d-%d''dir.',[SayiTabani,SonucTabani,AltSinir,UstSinir])
  else begin
    Sayi:=UpperCase(Trim(Sayi));
    fSayi:=0;Basamak:=1;
    for i:=Length(Sayi) downto 1 do begin
      j:=ChToRkm(Sayi[i]);
      if j>=SayiTabani then raise Exception.CreateFmt('%s sayısı %d tabanlı bir sayı değildir.',[Sayi,SayiTabani]);
      fSayi:=fSayi+(j*Basamak);
      Basamak:=Basamak*SayiTabani;
    end;
    Result:='';
    if fSayi=0 then Result:='0'
    else while fSayi>0 do begin
      Result:=RkmToCh(fSayi mod SonucTabani)+Result;
      fSayi:=fSayi div SonucTabani;
    end;
  end;
end;
第二个代码不工作,不返回任何结果。所以
如何将整数的“长”字符串的基转换为其他基?我想问题是绳子的长度?对吗?

您的问题是Delphi中的最大整数大小

MaxInt=2147483647

MaxInt64=9223372036854775807

您的号码=123456781234567898765432101234569870

因此,德尔福显然无法做到这一点

您可能需要使用BigInt


我使用了它,但我遇到了访问违规错误。这个或这个如何:不,我没有。如何将长十进制转换为十六进制?“我使用了它,但我得到了accsess违规错误。”没有告诉我们任何事情。它的使用方式肯定有问题,考虑到这样一个库的流行程度,我怀疑这个库有一个缺陷,无法实现这一点。为什么你坚持要将这些巨大的字符串“数字”(不是实际数字)转换成不存在的数字类型?如果你解释了你真正想要实现的目标,我相信这里的人会提出一个现实的替代方法,避免你反复尝试的所有这些愚蠢的转换努力。事实上,我从来没有想过任何可能的情况下,我可能需要使用一个数字,如12345678912345678998765432101234569870@JerryDodge加密、素因子分解等。
I convert:

String:=SayiCevir('123456789',10,11); //Thats OK.

If I wrote:

String:=SayiCevir('12345678912345678998765432101234569870',10,11); //FAIL!!