![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]С помощью этой функции -- никак. Она не для этого предназначена.