powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Задача: Большое 16-рич. число записать в строку как 10-тич. число
5 сообщений из 5, страница 1 из 1
Задача: Большое 16-рич. число записать в строку как 10-тич. число
    #33259525
Lana K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задачка.

Имеется буфер размером n байт (n <= 38). В этом буфере спрятано оочень большое целое положительное число. Это число записано в шестнадцатиричной системе и младшие разряды слева.
Например:
число 777777777777778 в 16-тирич. системе = 2с36280289с72,
(2"с3"62"80"28"9с"72"),
тогда в буфере заняты первые 7 байт следующим образом: 72, 9с, 28, 80, 62, с3, 2.
Задача: число из буфера в десятичной форме записать в строку (т. е. в примере выше получить строку "777777777777778").

BYTE hi, lo;
int multiplier = 1;

for( ULONG i = 0; i < buffLen; i++)
{
hi = lo = buffer ;
lo <<= 4;
lo >>= 4;
value += ( ( ( ULONG ) lo ) * multiplier );

multiplier *= 16;

hi >>= 4;
value += ( ( ( ULONG ) hi ) * multiplier );
multiplier *= 16;
}

Проблемы с value и вообще: int - туда много не влезет, double - тоже, да ещё и результаты очень неточные получаются :-(.

Может у кого идея есть?
...
Рейтинг: 0 / 0
Задача: Большое 16-рич. число записать в строку как 10-тич. число
    #33260045
AndreiNz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__int64 value; // if VC++

This is not a conversion to decimal...

Check may be to convert to BCD first. Then it will be easy.
...
Рейтинг: 0 / 0
Задача: Большое 16-рич. число записать в строку как 10-тич. число
    #33262224
pirovindos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть идея в развитие того что есть. Нужно в этом же цикле когда число больше 100 наберется, его 2 последних цыфры в выходной буфер напечатать и после этого на 100 нацело поделить.
...
Рейтинг: 0 / 0
Задача: Большое 16-рич. число записать в строку как 10-тич. число
    #33262345
AndreiNz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делить, по-моему надо на 10 и каждый раз сохнанять остаток от деления формируя результат с конца. До тех пор пока значение целночисленного деления не станет равным 0. Проблема только в том, что байтов может быть до 38 - следовательно стандартные операции не подходят. Мой совет - искать книжку по ассемблеру старых времен, где написанно как реализовать деление без использования комманд процессопа предназначенных для деления. умножения, ну или другую какую инфу, как делается деление в подобных случаях.
...
Рейтинг: 0 / 0
Задача: Большое 16-рич. число записать в строку как 10-тич. число
    #33262931
alenacpp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lana K.
Проблемы с value и вообще: int - туда много не влезет, double - тоже, да ещё и результаты очень неточные получаются :-(.

Может у кого идея есть?

Я думаю, что запихивать это число во встроенный тип - неправильный путь. Я бы попробовала поработать с алгоритмами работы с большими числами. Гугл много чего находит по запросам: "multiple precision arithmetic", "large integer arithmetic". У Кнута еще об этом есть, Т.2., глава "Арифметика многократной точности".
Причем если не хочется реализовывать их самой, можно подключить какую-нибудь библиотеку работы с большими числами. Можно либо всю библиотеку подключить, либо вытащить оттуда то, что нужно.

Ничего конкретного посоветовать не могу, но вот, например, такая библиотека, просто первое, что я нашла Гуглом :
http://www.di-mgt.com.au/bigdigits.html

Поточнее можно на каком-нибудь криптографическом форуме спросить, они там часто с большими числами работают.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Задача: Большое 16-рич. число записать в строку как 10-тич. число
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]