Brug af f.eks. Int64 samt konvertering af talsystemer
Jeg har i Delphi 7 at gøre med en string, som bliver begrænset af Integer-typen. Hvordan bruger man en større Int-type (f.eks. Int64, jeg har læst om det i den tilhørende Delphi manual, men fatter intet)? Jeg vil også gerne vide hvordan man nemmest konverterer tal imellem det binære, decimale og det hexadecimale talsystem.
Du kan bruge en Int64, stort set ligesom en Integer... Typen er godt nok ikke en ordinal, så du kan f.eks. ikke bruge den i et for-loop. Faktisk mener jeg at Int64'en er lavet på samme måde som de reelle typer i Delphi, Real, Extended osv.
Omkring IntToBin og IntToHex er der et par ekspemler på Eksperten, så prøv at søge lidt... Ellers er jeg tilbage i morgen! Nu vil jeg nemlig i seng! :)
Den bliver begrænset af integer-typen: Integer-variabler kan maximalt indeholde cifferet 268435455 og jeg kunne godt tænke mig at arbejde med noget større numre.
Hvad angår Int64: Hmm... ok, men hvordan klarer jeg så at kværne variablen igennem et for-loop (for det skal den)?
>>the_cyrez Det bliver godt nok noget af et forloop så!!! Hvis du bare skal starte fra 0, hvad så med at bruge en Cardinal!?
Så kan du bruge
for I := 0 to 4294967295 do ShowMessage(IntToStr(I));
Det bliver et meeeeeget stort loop!!!
Hvis du endelig skal bruge en kæmpe loop, hvad så med bare at bruge while-do, eller repeat-until!?
var I: Int64; begin I := -9223372036854775808; //Minimum for en Int64 while I < 9223372036854775807 do //Maximum for en Int64 begin ShowMessage(IntToStr(I)); I := I + 1; end;
repeat ShowMessage(IntToStr(I)); I := I - 1; until I <= -9223372036854775808; end;
Sorry to say it, men selv hvis du bare kører loopet uden ShowMessage, så kommer det til at tage rimelig lang tid... Hvorfor har du brug for sådan et kæmpeloop!?
Jeg har et program med tre input/output-tekstfelter (binære, decimale og hexadecimale tal). Når man skriver et tal i et af felterne skal de to andre taltyper dukke frem i deres respektive felter (svarende til samme talværdi)
Til at konvertere mellem BinToInt, DecToInt, HexToInt, IntTobin, IntToStr, IntToHex er der funktioner af samme navn længere oppe i filen som får variablen ind som Str og ud som Int og derefter ind som Int og ud som pågældende talsystem (f.eks. ved hjælp af for-loops). Problemet består for mig i at Int begrænser talvariablen, hvilket jeg derfor gerne vil have ændret til f.eks. Int64 eller noget bedre (?), men jeg ved ikke hvordan.
Her er koden til funktionen bin -> dec & hex (ved godt det kan skrives kortere, men ikke helt hvordan):
procedure TFormMain.ButtonExe_BinDecHexClick(Sender: TObject); var Input,test,len,c: Integer; s:TCaption; ch:char; check_01,check_len:boolean; str,Input_2:string; begin If button_bin.checked = True then begin str := text_bin.Text; check_01 := True; check_len := True; len := length(str); if (len > 28) then begin check_len := False end; for c := len downto 1 do begin ch := str[c]; if (ch = '0') or (ch = '1') then else check_01 := False end; if ((check_01 = True) and (check_len = True)) then begin Input := BinToInt(str); text_dec.Text := IntToStr(Input); text_hex.Text := IntToHex(Input); end else begin text_dec.Text := ''; text_hex.Text := ''; end; end; If button_dec.checked = True then begin s := text_dec.Text; if tryStrToInt(s,test) = True then begin //Input := StrToInt(s); text_bin.Text := IntToBin(test); text_hex.Text := IntToHex(test); end else begin text_bin.Text := ''; text_hex.Text := ''; end; end; If button_hex.checked = True then begin s := text_hex.Text; Input_2 := IntToStr(hexToInt(s)); if tryStrToInt(Input_2,test) = True then begin text_bin.Text := IntToBin(StrToInt(Input_2)); text_dec.Text := IntToStr(StrToInt(Input_2)); end else begin text_bin.Text := ''; text_dec.Text := ''; end; end; end;
!OBS! Hvis jeg får løst dette (set for mig) indviklede problem, er jeg villig til at forhandle om en pæn sjat ekstra point!!! !OBS!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.