Я пишу базовый преобразователь, потому что скоро у меня будет тест, и мне нужно преобразовать двоичное число в 3 разных основания: восьмеричное, десятичное и шестнадцатеричное. Я уже написал код, преобразующий двоичную строку в десятичную и шестнадцатеричную.
function bintodec(Value:string;dec:TEdit;hexadec:TEdit): Integer;
var //dec and hexadec are the TEdits where I will put the result
i, iValueSize: Integer;
Edit2,f:TEdit;
begin
Result := 0;
iValueSize := Length(Value);
for i := iValueSize downto 1 do
begin
if Value[i] = '1' then Result := Result + (1 shl (iValueSize - i));
end;
dec.Text:=(IntToStr(Result)); //dec. number
hexadec.Text:=(IntToHex(Result,8)); //hexadec. number
end;
Как вы можете видеть здесь, функция принимает строку (например, 10101001) и помещает результат в 2 разных редактирования.
Я сделал функцию, которая преобразует десятичное число в восьмеричное, но когда я нажимаю кнопку SpeedButton Calc.
, у меня возникает ошибка. В нем говорится, что проект1 вызвал исключение класса «Внешний: SIGSEGV», а затем рядом с Unit1 я вижу страницу control.inc. Я искал в Google решение, но не нашел полезных ответов.
function dec2oct(mystring:Integer): String;
var
a: String;
getal_met_rest : Double;
Edit2:TEdit;
begin
while mystring> 0 do
begin
getal_met_rest := getal / 8;
a:= a + IntToStr(mystring - (trunc(getal_met_rest)*8));
getal := trunc(getal_met_rest);
end;
dec2oct:=ReverseString(a);
Edit2.text:=dec2oct
end;
Я не нашел способа двоично-восьмеричного преобразования, поэтому после преобразования из двоичного в десятичное я вызываю функцию dec2oct
. Я вызываю функции таким образом:
var a:smallint;
begin
bintodec(Edit1.Text,Edit3,Edit4);
dec2oct(Edit3.Text); //Edit3 contains the number on base 10
end;
Не могли бы вы помочь мне?