Пиша основен конвертор, защото скоро имам тест и трябва да конвертирам двоично число в 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.
, имам грешка. Казва, че project1 е повдигнал изключение от клас „External: 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;
Можеш ли да ми помогнеш?