Witajcie. Jestem w trakcie projektowania pewnego systemu przetwarzającego dane i będzie on bazował głównie na ogromnych liczbach. Owe liczby z pogranicza zakresu Cardinal będą konwertowane na binarny ciąg do zmiennej String no i będzie też konwersja w drugą stronę.
Pozwoliłem sobie ściągnąć gotowce z netu - funkcje do konwersji, następujące:
function dec2bin(d:cardinal):string;
begin
result:='';
if d<>0 then
while d<>0 do begin
result:=inttostr(d mod 2)+result;
d:=d div 2;
end else result:='0';
end;
function bin2dec(b:string):cardinal;
var i:integer;
begin
result:=0;
for i:=1 to length(b) do
if b[i]='1' then result:=result*2+1 else result:=result*2;
end;
Niestety nie działają one w sposób, jakiego oczekuję, a nie znam się na tyle na rodzajach zmiennych, aby sobie z tym poradzić. Załóżmy, że mam liczbę binarną 11010101010101010010101100101 i chciałbym ją zapisać jako liczbę dziesiętną, ale naturalną. Niestety jedyna z przodu powoduje, że funkcją podaną powyżej dostaję liczbę ujemną, co niszczy mi algorytm, który spodziewa się wyłącznie cyfr lub znaku CF/LF.
W drugą stronę - liczby wczytywane są z pliku, którego zawartość to różne liczby całkowite (a chciałbym naturalne) oddzielone enterami, np:
1853124467
824193080
-1878589436
67108864
3158320
672
-1610350591
16777216
131077
Potrzebuję, żeby ktoś ogarnięty w temacie wytłumaczył mi jak skonwertować dowolną liczbę naturalną (Cardinal) na binarną w taki sposób, aby po konwersji w drugą stronę dostać całkowitą dodatnią, a nie całkowitą ujemną liczbę :( Cały dzień z tym walczę, szlag mnie trafia, to pewnie jest proste, ale ja nie jestem programistą i pewnych rzeczy nie kumam (nawet nie wiem co to są klasy :)). Pozdrawiam