Delphi Can
Büyük Sayılarla Çalışmak - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: Büyük Sayılarla Çalışmak (/showthread.php?tid=2598)

Sayfalar: 1 2


Büyük Sayılarla Çalışmak - narkotik - 02-09-2018

Merhaba
HexToDec işlemi yapıyorum. Fakat gelen hex. sayı fazla büyük buda sonucu bana - olarak döndürmesine neden oluyor. Bu tarz durumlarda ne yapılmalı.

function HexToDec(Str: string): LongInt;
var
 i, M: Integer;
begin
 Result:=0;
 M:=1;
 Str:=AnsiUpperCase(Str);
 for i:=Length(Str) downto 1 do
 begin
   case Str[i] of
     '1'..'9': Result:=Result+(Ord(Str[i])-Ord('0'))*M;
     'A'..'F': Result:=Result+(Ord(Str[i])-Ord('A')+10)*M;
   end;
   M:=M shl 4;
 end;
end;

Hex hali = 9a2929c7


Büyük Sayılarla Çalışmak - masteryoda - 02-09-2018

https://github.com/rvelthuis/DelphiBigNumbers
buraya bir göz atın.


Cvp: Büyük Sayılarla Çalışmak - narkotik - 02-09-2018

(02-09-2018, Saat: 21:06)masteryoda Adlı Kullanıcıdan Alıntı: https://github.com/rvelthuis/DelphiBigNumbers
buraya bir göz atın.

Aslında bana string olarak lazım sonuç. Sadece bir convert için bu kadar pası projeye eklemek ne kadar mantıklı

Çok basit bir hata yaptığımı farkettim sonucu int64 yapıp ara değişkenleri integer yaptığım için patlıyomuşum.
Herkese iyi akşamlar Smile Saygılar.
function HexToDec(Str: string): int64  ;
var
 i, M: int64;
begin
 Result:=0;
 M:=1;
 Str:=AnsiUpperCase(Str);
 for i:=Length(Str) downto 1 do
 begin
   case Str[i] of
     '1'..'9': Result:=Result+(Ord(Str[i])-Ord('0'))*M;
     'A'..'F': Result:=Result+(Ord(Str[i])-Ord('A')+10)*M;
   end;
   M:=M shl 4;
 end;
end;



Büyük Sayılarla Çalışmak - sabanakman - 02-09-2018

Fonksiyon tipini LongInt yerine UInt64 olarak değiştirip deneyin. Çok daha büyük sayılar devreye girmeyecekse mevcut durumu idare edebilir belki. Yoksa bu durum için yazılacak kodlar, bunca pas dosyasını projeye eklemekten çok daha maliyetli olabilir Big Grin .


Büyük Sayılarla Çalışmak - uparlayan - 02-09-2018

Cardinal veri tipini kullanabilirsin.

FFFFFFFF = 4294967295

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Simple_Types_(Delphi)

https://www.binaryhexconverter.com/hex-to-decimal-converter


Büyük Sayılarla Çalışmak - narkotik - 02-09-2018

işin garip tarafı VCL'de doğru sonuç verirken firemonkeyde saçmalıyor.


Büyük Sayılarla Çalışmak - uparlayan - 02-09-2018

UInt64 veri tipi ile de denermisin,

http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.UInt64


Cvp: Büyük Sayılarla Çalışmak - narkotik - 02-09-2018

(02-09-2018, Saat: 22:32)uparlayan Adlı Kullanıcıdan Alıntı: UInt64 veri tipi ile de denermisin,

http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.UInt64

Hocam denedim olmadı shl işlemi firemonkeyde saçmalıyor. Algoritmayı shl siz hale çektim düzeldi şimdi

(02-09-2018, Saat: 22:32)uparlayan Adlı Kullanıcıdan Alıntı: UInt64 veri tipi ile de denermisin,

http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.UInt64

Hocam fakat saçma geldi bana müsaitseniz kodu VCL de birde Firemonkeyde denermisiniz bir bende mi böyle oluyor.


Büyük Sayılarla Çalışmak - uparlayan - 02-09-2018

VCL ve FMX'de windows x32 ve x64'te denedim, bende normal çalışıyor


Cvp: Büyük Sayılarla Çalışmak - narkotik - 02-09-2018

(02-09-2018, Saat: 23:15)uparlayan Adlı Kullanıcıdan Alıntı: VCL ve FMX'de windows x32 ve x64'te denedim, bende normal çalışıyor

Android derlediğimde telefonda saçmalıyor zaten