Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

HexToBin - pozhalujsta, o4en' nuzhno [D7, XP]


Glex ©   (2005-12-03 12:45:00) 

Prowu, podskazhite, kak s pomowju etoj funkcii ili drugim sposobom skonvertirovat' stroku s 16-ri4nym 4islom v stroku s takim zhe chislom, no v dvoi4noj sisteme s4islenija!
Sorry za translit.


begin...end   (2005-12-03 17:55:00) [1]

> Anatoly Podgoretsky ©   (03.12.05 17:50) [9]

Имеете в виду преобразования отдельных блоков с помощью StrToInt ($) + IntToBin?


Anatoly Podgoretsky   (2005-12-03 17:50:00) [2]

Если такая функция есть, то можно буфер любой длины вывести с помощью ее. Конечно для HEX строк это будет не оптимально.


begin...end   (2005-12-03 17:21:00) [3]

> Anatoly Podgoretsky ©   (03.12.05 17:17) [7]

Речь о стандартной IntToBin. Она переводит 4-байтный Integer.


Anatoly Podgoretsky   (2005-12-03 17:17:00) [4]

begin...end ©   (03.12.05 16:46) [4]
Не факт, а нафиг и не нужно, строка в строку легко переводится, что ты и показал. Задачка из задач для начинающих, самые основы программирования.


Anatoly Podgoretsky   (2005-12-03 17:15:00) [5]

Glex ©   (03.12.05 17:10) [5]
Число, кстати 250 цифр длиной.

Длина не имеет значения!


Glex   (2005-12-03 17:10:00) [6]

Спасибо всем огромное!
Сидел до 2х часов на городской олимпиаде, думал над задачей.
Встал сегодня в 6:50, не выспался.
Простите за глупый вопрос =)
Число, кстати 250 цифр длиной.

Аффигеть, я так тупо поступил, вначале число в 10-ричною преобразовывал. Потом получившееся делением в столбик в 2-ичную =)))
Используя модуль длинной арифметики...


begin...end   (2005-12-03 16:46:00) [7]

> glex ©   (03.12.05 14:12) [2]

Свою написать. Например, такую:

function HexToBin(const Hex: string): string;
const
 Digits: array ['0'..'9'] of string =
   ('0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111', '1000', '1001');
 Letters: array ['A'..'F'] of string =
   ('1010', '1011', '1100', '1101', '1110', '1111');
var
 I, L: Integer;
 C: Char;
begin
 L := Length(Hex);
 SetLength(Result, L * 4);
 for I := 1 to L do
 begin
   C := Hex[I];
   if C in ['0'..'9'] then
     Move(Digits[C][1], Result[I * 4 - 3], 4)
   else if C in ['A'..'F'] then
     Move(Letters[C][1], Result[I * 4 - 3], 4)
   else
     raise Exception.CreateFmt('Incorrect symbol: %s; position: %d', [C, I])
 end
end


> Anatoly Podgoretsky ©   (03.12.05 15:33) [3]

Она появилась. Но автору нужно не само целое число (Integer), а его шестнадцатеричное представление преобразовывать. Не факт, что это представление соответствует числу, умещающемуся в 4 байтах.


Anatoly Podgoretsky   (2005-12-03 15:33:00) [8]

А без нее надо писать свою функцию IntToBin, если конечно она не появилась в этой версии Дельфи


glex   (2005-12-03 14:12:00) [9]

nu a bez nee?


begin...end   (2005-12-03 13:01:00) [10]

С помощью этой функции -- никак. Она не для этого предназначена.


Наверх

Титульная страница Поиск, карта сайта Написать письмо