Показать сообщение отдельно
  #5  
Старый 06.04.2014, 00:12
mobac mobac вне форума
Прохожий
 
Регистрация: 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? Не получается..
Ответить с цитированием