
06.04.2014, 00:12
|
Прохожий
|
|
Регистрация: 23.09.2012
Сообщения: 14
Репутация: 10
|
|
Цитата:
Сообщение от poli-smen
Когда-то писал функции для преобразования из любой системы счисления в число и из числа в любую систему счисления. С тех пор много раз их использовал - так что ошибок в них быть не должно.
Вот та которая преобразует из любой системы счисления в число:
Код:
function TryBaseXToUInt(const Value, BaseStr: String; out UInt: LongWord): Boolean;
var
Base, i, p, k, OldUInt: LongWord;
begin
Result := False;
UInt := 0;
Base := Length(BaseStr);
if (Value <> '') and (Base > 1) then
begin
k := 1;
for i := 1 to Length(Value) do
if Value[i] = BaseStr[1] then Inc(k) else Break;
for i := k to Length(Value) do
begin
p := pos(Value[i], BaseStr);
if p = 0 then
begin
UInt := 0;
Exit;
end;
OldUInt := UInt;
UInt := UInt * Base + (p - 1);
if UInt < OldUInt then // Переполнение
begin
UInt := 0;
Exit;
end;
end;
Result := True;
end;
end;
Ну а преобразовать число в шестнадцатеричную систему счисления можно и с помощью стандартной IntToHex.
Пример использования:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
k: LongWord;
begin
if TryBaseXToUInt(Edit1.Text, 'ABCDEFGO', k) then
begin
ShowMessageFmt('%s => $%s', [Edit1.Text, IntToHex(k, 8)]);
end else
begin
ShowMessage('Ошибка');
end;
end;
|
А как мне сделать, чтоб в edit1.text заменялись например AAA AAA AAA CAA склеенные в AAAAAAAAAEAA чтоб преобразовались они в 00000080 в edit2.text? Не получается..
|