Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Системы счисления, перевода числео в раличных ССиз разных 
:(
    Опции темы
varaket
Дата 5.10.2006, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 5.10.2006

Репутация: нет
Всего: нет



Народ, помогите, пожалйуста. Дело в том, что необходима процедура (или функция) которая может переводить в различные системы счисления из различных. Слышал, что есть стандартная функция в Delphi. Кто знает, помогите, пожалуйста. 

PM MAIL   Вверх
Snowy
Дата 5.10.2006, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



посмотри линки внизу страницы
PM MAIL   Вверх
Yanis
Дата 5.10.2006, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата
The following function will convert a number from one base to 
a number of another base: 

procedure RadixStr(NumStr : pChar; 
Radix : LongInt; 
ResultStr : pChar; 
NewRadix : LongInt; 
var ErrorCode : LongInt); 

The RadixStr() function takes a pointer to a null terminated string 
containing a number of one base, and fills a buffer with a null 
terminated string containing the number converted to another base. 

Parameters: 

NumStr: A pointer to a null terminated string containing the numeric 
string to convert: 

Radix: The base of the number contained in the NumStr parameter. The 
base must be in the range of 2 to 36; 

ResultStr : A pointer to a null terminated string buffer to place the 
resulting numeric string. The buffer should be sufficiently large to 
hold the resulting string. 

NewRadix: The base to use in the conversion. The base must be in the 
range of 2 to 36; 

ErrorCode: Upon return, contains the return code 0 if successful, or 
the character number of the offending character contained in the 
buffer NumStr. 

Examples of calling the RadixStr() function: 

{Convert Hex to Decimal} 
RadixStr('FF', 
         16, 
         lpBuffer, 
         10, 
         Code); 

Should return the string '255' in lpbuffer^. 

{Convert Decimal to Binary} 
RadixStr('255', 
         10, 
         lpBuffer, 
         2, 
         Code); 

Should return the string '11111111' in lpbuffer^. 

{Convert Hex to Octal} 
RadixStr('FF', 
         16, 
         lpBuffer, 
         8, 
         Code); 

Should return the string '377' in lpbuffer^. 

{Function code} 

procedure RadixStr(NumStr : pChar; 
                   Radix : LongInt; 
                   ResultStr : pChar; 
                   NewRadix : LongInt; 
                   var ErrorCode : LongInt); 
var 
  RadixChar : array[0..35] of Char; 
  v : LongInt; 
  i : LongInt; 
  p : LongInt; 
  c : Integer; 
begin 
  if ((Abs(Radix) < 2) or 
      (Abs(Radix) > 36)) then begin 
    ErrorCode := p; 
    Exit; 
  end; 
  StrLCopy(ResultStr, NumStr, StrLen(NumStr)); 
  for i := 0 to 35 do begin 
    if i <= 9 then 
      RadixChar[i] := Char(48 + (i)) 
    else 
      RadixChar[i] := Char(64 + (i - 9)) 
  end; 
  v := 0; 
  for i := 0 to (StrLen(ResultStr) - 1) do begin 
    ResultStr[i] := UpCase(ResultStr[i]); 
    p := Pos(ResultStr[i], PChar(@RadixChar)) - 1; 
    if ((p < 0) or 
        (p >= Abs(Radix))) then begin 
      ErrorCode := i; 
      Exit; 
    end; 
    v := v * Abs(Radix) + p; 
  end; 
  if v = 0 then begin 
    ResultStr := '0'; 
    ErrorCode := 0; 
    exit; 
  end else begin 
    i:=0; 
    repeat 
      ResultStr[i] := RadixChar[v mod NewRadix]; 
      v := v div NewRadix; 
      Inc(i) 
    until v = 0; 
    if Radix < 0 then begin 
      ResultStr[i] := '-'; 
      ResultStr[i + 1] := #0 
    end else 
      ResultStr[i] := #0; 
    p := StrLen(ResultStr); 
    for i := 0 to ((p div 2) - 1) do begin 
      ResultStr[i] := Char(Byte(ResultStr[i]) xor 
                           Byte(ResultStr[(p - i) - 1])); 
      ResultStr[(p - i) - 1] := Char(Byte(ResultStr[(p - i) - 1]) xor 
                                     Byte(ResultStr[i])); 
      ResultStr[i] := Char(Byte(ResultStr[i]) xor 
                           Byte(ResultStr[(p - i) - 1])) 
    end; 
    ResultStr[p] := #0; 
    ErrorCode := 0; 
  end; 
end; 

Взял из DRKB.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Snowy
Дата 5.10.2006, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Можно просто в поле поиска ввести "системы счисления".
Закрываю тему за ненадобностью обсуждения.
PM MAIL   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2803 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.