Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Перевод HEX -> DEC

6.8K
11 августа 2008 года
Аццкий программер
91 / / 27.11.2006
Я надеюсь название темы не смутит вас своей простотой. Имеется в виду не совсем обычное перобразование из одной с-мы счисления в другую.

(з.ы. в [квадратных скобках] буду писать основание системы)

Предположим есть число 10[16] надо перевести ее в ??[10].
Способ перевода всем извесен со школы:
10[16] = 1*16 + 0*1 = 16[10]
и так далее для любого числа...почти любого, пока мы можем вычислить x*16^n. Как только n переваливает за 8ой разряд у нас происходит переполнение long'а (__int64 тоже не особо поможет).

Сложность моей задачи как раз и состоит в том, что числа для перевода слишком большие(512 бит), чтобы можно было их сосчитать таким способом.
(наример:
52648f924d25b8b978f945c6324897456287a43264ee189266732[16]->??[10])

У меня есть только одна идея способа реализации перевода такого числа - самого примитивного и медленного: сделать что-то вроде десятиричного счетчика с бесконечным числом разрядов, хранящегося в строке. Декриментировать HEX до нуля, инкрементируя счетчик. Тупо, зато работает.

Есть у кого какие-нть идеи?
1.6K
12 августа 2008 года
Shtirlitz
145 / / 31.07.2006
52648f924d25b8b978f945c6324897456287a43264ee189266732-вот это вы собираетесь декрементировать? Трудно представить сколько времени на это уйдет. Я бы использовал схему Горнера взяв за основание 16^4-ричную систему. Ну и без арифметики длинных чисел здесь не обойтись.

P.S. Даже для декремента числа 2*10^9[10] на моей машине уходит около 10 секунд. Это конечно не точная оценка, но тем не менее, впечатляет.
1.9K
12 августа 2008 года
andriano
474 / / 10.01.2008
1. И HEX и DEC - способы записи числа, т.е. строки символов. Над строками нельзя производить арифметические действия, поэтому исходное преобразование состоит не из 1, а из двух стадий: Dec->внутреннее представление чисел->DEC.
2. Существуют известные большинству людей еще со школы алгоритмы сложения, вычитания, умноржения и деления многоразрядных чисел в столбик. Именно ими и следует пользоваться. При этом во "внутремем представлении" число может быть не только строкой, но и массивом обычных чисел, например, 4-байтовых.
6.8K
12 августа 2008 года
Аццкий программер
91 / / 27.11.2006
Цитата:
1. И HEX и DEC - способы записи числа, т.е. строки символов. Над строками нельзя производить арифметические действия, поэтому исходное преобразование состоит не из 1, а из двух стадий: Dec->внутреннее представление чисел->DEC.
2. Существуют известные большинству людей еще со школы алгоритмы сложения, вычитания, умноржения и деления многоразрядных чисел в столбик. Именно ими и следует пользоваться. При этом во "внутремем представлении" число может быть не только строкой, но и массивом обычных чисел, например, 4-байтовых.



Как производить операции я имею представление. Каким образом это относится к переводу?

6.8K
12 августа 2008 года
Аццкий программер
91 / / 27.11.2006
Цитата:
52648f924d25b8b978f945c6324897456287a43264ee189266 732-вот это вы собираетесь декрементировать?



Во-первых, я не собирался производить перевод именно тем способом, что я описал. Просто сказал, что мне ничего не приходит в голову умнее вот такой убогой схемы перевода.

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

87
12 августа 2008 года
Kogrom
2.7K / / 02.02.2008
Способ перевода всем извесен со школы:
10[16] = 1*16 + 0*1 = 16[10]
и так далее для любого числа...почти любого, пока мы можем вычислить x*16^n. Как только n переваливает за 8ой разряд у нас происходит переполнение long'а (__int64 тоже не особо поможет).

Сложность моей задачи как раз и состоит в том, что числа для перевода слишком большие(512 бит), чтобы можно было их сосчитать таким способом.
(наример:
52648f924d25b8b978f945c6324897456287a43264ee189266732[16]->??[10])


У вас же задача специфическая - работа с 512-битными числами. Т.е. универсальности не требуется. Ну, вот и составтьте массив десятичных 16^n до нужного разряда и с ними работайте.

1.9K
13 августа 2008 года
andriano
474 / / 10.01.2008
Как производить операции я имею представление. Каким образом это относится к переводу?



1. Для решения ЛЮБОЙ задачи ее сначала надо понять.
2. Для перевода многоразрядных чисел требуется умение производить с ними арифметические операции. Процессор умеет производить операци над числеми невысокой разрядности, а над длинными - нет. Поэтому нам для перевода чисел из одной системы в другую требуется реализовать алгоритмы арифметических операций над длиными числами.

6.8K
14 августа 2008 года
Аццкий программер
91 / / 27.11.2006
Цитата:
1. Для решения ЛЮБОЙ задачи ее сначала надо понять.
2. Для перевода многоразрядных чисел требуется умение производить с ними арифметические операции. Процессор умеет производить операци над числеми невысокой разрядности, а над длинными - нет. Поэтому нам для перевода чисел из одной системы в другую требуется реализовать алгоритмы арифметических операций над длиными числами.



все готово давно(класс BigInt для работы с 512 битными числами). и работает нормально в 16 разрядной системе (сложение, умножение, деление, вычитание, сдвиг влево/вправо).
Это не проблема и не суть вопроса.

Вопрос в том как перевести число из HEX в DEC, если формула:
...12345 = ... + 1*65536 + 2*4096 + 3*256 + 4*16 + 5*1
непримениема из-за большого количества рарядов в HEX форме

1.9K
15 августа 2008 года
andriano
474 / / 10.01.2008
Применимость формулы никак не связана с разрядностью чисел.
Поэтому следует либо уточнить вопрос, либо, если это не по силам, попытаться объяснить, каким образом усматривается эта мнимая связь. В этом случае можно будет найти ошибку в рассуждениях и порекомендовать, что следует делать.
536
17 сентября 2008 года
alex-kniaz
382 / / 07.08.2008
Наверное, придётся через динамические массивы фигачить...
14
17 сентября 2008 года
Phodopus
3.3K / / 19.06.2008
Трупики оживляем?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог