Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/187: Рейтинг темы: голосов - 187, средняя оценка - 4.95
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1

Перевод числа из hex в dec

10.07.2016, 15:37. Показов 36145. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, можете подсказать как можно перевести 16-ричное число произвольной длины (например, заданное с помощью строки) в десятичную сс? (также можно в строку)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.07.2016, 15:37
Ответы с готовыми решениями:

Перевод чисел Bin - Oct - Dec - Hex
Существуют ли функции для перевода числа (или строки из цифр) из одной системы счисления (по основанию 2, 8, 10, 16) в другую. Как из...

[BMP] HEX (из HEX-редактора) в DEC
Имеется файл *.bmp (который нельзя вложить в сообщение). В самом файле есть его свойства (размер и т.д.). Как их перевести из HEX в DEC? ...

Из Hex в Dec
Перевел из чара в инт и что-то не вьеду как теперь возвести . #include<iostream> #include<cmath> #include<string> ...

40
12.07.2016, 21:47
Студворк — интернет-сервис помощи студентам

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
void main()
]:-> на костёр :D

0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
12.07.2016, 21:50  [ТС]
IGPIGP, к сожалению, не получилось
'1', '2', 'A', 'C', 'c', 'f' - я так понял представляется число 12ACCF в hex

По идее результат перевода в dec число должен содержать как минимум столько же цифр, сколько их было изначально в hex, а у вас число цифр в числе уменьшилось)
0
 Аватар для HenryDukart
125 / 125 / 44
Регистрация: 05.10.2013
Сообщений: 462
12.07.2016, 21:53
Ferrari F1,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include <string>
#include <stack>
#include <strstream>
 
using namespace std;
 
pair<int, string> divide_by_10(const string& dividend);
 
int main()
{
 
    string hex_str = "ABCDEF1";
    stack<int> digits;
    pair<int, string> residual_quotient;
 
    cout << "Hex string: " << hex_str << endl;
 
    while (hex_str != "0")
    {
        residual_quotient = divide_by_10(hex_str);
        digits.push(residual_quotient.first);
        hex_str = residual_quotient.second;
    }
 
    cout << "Dec string: ";
    while (!digits.empty())
    {
        cout << digits.top();
        digits.pop();
    }
    cout << endl;
    
}
 
pair<int, string> divide_by_10(const string& dividend)
{
    string quotient, tmp;
    int residual = 0,
        dividend_num;
    size_t length = dividend.length();
    strstream converter;
 
    for (size_t i = 0; i < length; ++i)
    {
        converter << dividend[i] << endl;
        converter >> hex >> dividend_num;
 
        dividend_num += residual * 16;
        residual = dividend_num % 10;
 
        converter << hex << (dividend_num / 10) << endl;
        converter >> tmp;
        quotient.append(tmp);
 
    }
 
    if ((quotient[0] == '0') && (quotient.length() > 1))
        quotient.erase(quotient.begin(), ++quotient.begin());
 
    return make_pair(residual, quotient);
}
2
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
12.07.2016, 22:08
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
IGPIGP, к сожалению, не получилось
числа цифр там равны: 4 шт. в 1AFF (6911) и столько же в 2165
но логика кривая, да. Цифры 16-ричные а представляют будто десятичные разряды.

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
на костёр
И так жарко. А войд хоть звучит прохладнее :scratch:

0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
13.07.2016, 07:54
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
///////////////////////////////////////////////////////////////////////////////
//1.
///////////////////////////////////////////////////////////////////////////////
//как можно перевести 16-ричное число произвольной длины
//(например, заданное с помощью строки) в десятичную сс?
//(также можно в строку)
///////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <cctype>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
///////////////////////////////////////////////////////////////////////////////
typedef std::string                 T_str;
typedef std::vector     < int   >   T_big_num;
///////////////////////////////////////////////////////////////////////////////
void    mult_to_16( T_big_num   &   big_num )
{
    for( auto   &   elem    :   big_num )
    {
        elem    *=  16;
    }
}
///////////////////////////////////////////////////////////////////////////////
void    add_to_bignum
    (
        T_big_num   &   big_num,
        int             num
    )
{
    big_num.front()  +=  num;
}
///////////////////////////////////////////////////////////////////////////////
void    normalize( T_big_num   &   big_num )
{
    int     remainder{};
 
    for( auto   &   elem    :   big_num )
    {
        elem        +=  remainder;
        remainder   =   elem / 10;
        elem        %=  10;
    }//for
 
    if( remainder )
    {
        big_num.push_back( remainder );
    }
 
    if  (
            big_num.back()  >   9
        )
    {
        normalize( big_num );
    }
}
///////////////////////////////////////////////////////////////////////////////
T_str   big_num_to_str( T_big_num   &   big_num )
{
    T_str   res;
 
    std::transform
        (
            big_num.rbegin      (),
            big_num.rend        (),
            std::back_inserter  ( res ),
 
            []  ( auto  num )
            {
                return  '0'     +   num;
            }
        );
 
    return  res;
}
///////////////////////////////////////////////////////////////////////////////
T_str   hex_to_dec( T_str   const   &   hex_str )
{
    T_big_num   big_num_res(1);
 
    for( auto   &   dig_symb    :   hex_str )
    {
        mult_to_16( big_num_res );
 
        auto    dig     =   std::stoi   (
                                            T_str( 1, dig_symb ),
                                            0,
                                            16
                                        );
 
        add_to_bignum
            (
                big_num_res,
                dig
            );
 
        normalize( big_num_res );
    }//for
 
    return  big_num_to_str( big_num_res );
}
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    T_str   s   =   "FFAADA5343DADADAE45343FFFAFCEFFAADA5343DADADAE4534"
                    "3FFFAFCEFFAADA5343DADADAE45343FFFAFCE";
 
    std::cout   <<  hex_to_dec(s)
                <<  std::endl;
}
1
13.07.2016, 11:59

Не по теме:

Mr.X - человек из космоса с мегаформатным кодом
стиль Hypernova

0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
13.07.2016, 14:20  [ТС]
HenryDukart, можете объяснить словесно алгоритм пожалуйста?
Мне бы просто никогда не взбрело в голову использовать стек. Возможно, потому, что ни разу не писал деление...
0
 Аватар для HenryDukart
125 / 125 / 44
Регистрация: 05.10.2013
Сообщений: 462
13.07.2016, 14:40
Ferrari F1, алгоритм работает согласно вашему рисунку. Функция divide_by_10 делит число в шестнадцатеричной системе, которое находится в строке, на 10. Возвращает остаток от деления (в десятичной системе в виде int) и частное (в виде строки в шестнадцатеричной системе). Частное на предыдущем шаге используется как делимое на следующем.

Остатки помещаются в стек, потому что их нужно будет извлекать в обратном порядке (опять же смотрите вашу картинку).

Проблема будет, если на вход подать "0". Чтобы убрать эту ошибку необходимо исправить цикл

C++
1
2
while(hex_str != "0")
{ ... }
на

C++
1
2
do
{ ...  } while(hex_str != "0")
1
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
13.07.2016, 14:45  [ТС]
HenryDukart, я просто уже 3ий день бился над реализацией этого алгоритма.
В голову ничего не приходит путнего. Не додумался использовать стек и строковые потоки (хоть и в вашем коде используется устаревшая их версия).

Я не знаю как преобрести навык проектирования алгоритма решения задачи.
Может, посоветует кто, как такое умение приобрести?
0
 Аватар для HenryDukart
125 / 125 / 44
Регистрация: 05.10.2013
Сообщений: 462
13.07.2016, 14:49
Ferrari F1, книги и практика вам в помощь.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
13.07.2016, 14:53  [ТС]
HenryDukart, у меня просто не получается формализовать этот процесс (процесс продумывания алгоритма) на все возникающие передо мной задачи.

По-вашему, есть какие-то общие правила составления алгоритма или это творческий процесс?
0
 Аватар для HenryDukart
125 / 125 / 44
Регистрация: 05.10.2013
Сообщений: 462
13.07.2016, 15:13
Ferrari F1,

Не по теме:

Считаю, что изобретение алгоритма требует много знаний, творческого потенциала и, возможно, везения. А вот уже для самого "кодирования" достаточно обладать памятью и опытом.

0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
13.07.2016, 16:42  [ТС]
Нуу, я немного не об этом, конечно... Я вот знаю как на бумажке делить в столбик.
А как научиться переводить этот навык на компьютерный язык?
Вот в подобных случаях и возникают, как правило, трудности...
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
13.07.2016, 16:49
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Я не знаю как преобрести навык проектирования алгоритма решения задачи.
Надо хоть что-то делать самому. В теме 30+ сообщений, немало кода, но нет ни строчки, написанной ТС. Хочешь бегать - бегай, хочешь поднимать тяжести - поднимай. Можно, конечно, смотреть, как это делают другие, но толку будет мало (если он вообще будет).
Несколько раз в теме писалось: "нужна длинная арифметика". Ее в интернете навалом - и на строках и на массивах и на векторах, но ТС ничего ни искать ни делать самостоятельно (по аналогии со школьным умножением и сложением в столбик) не стал. С таким подходом С++ никогда не осилить
1
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
13.07.2016, 16:59  [ТС]
Цитата Сообщение от zer0mail Посмотреть сообщение
нет ни строчки, написанной ТС.
код у меня есть, но недоделанный. Просто иногда бывают моменты когда просто не соображаешь, что надо писать, чтобы было в верном направлении...
А вместо этого получается какая-то лажа в виде багов.
Пишешь например, а потом выясняется, что числа типа F00001 неверно обрабатываются из-за наличия промежуточных нулей.
Или например первая (или любая внутренняя) цифра в числе не делится нацело на десять (она меньше 10), тогда нужно запоминать эту цифру и к след. разряду ее приписывать (1F01).
Слишком много случаев получается, и в голове их все, бывает, не можешь удержать. Как следствие - баги...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
 
unsigned f_fromHex(const char& digit)
{
    switch (digit)
    {
    case 'A':
        return 10;
        break;
    case 'B':
        return 11;
        break;
    case 'C':
        return 12;
        break;
    case 'D':
        return 13;
        break;
    case 'E':
        return 14;
        break;
    case 'F':
        return 15;
        break;
    default:
        return digit - '0';
        break;
    }
}
 
unsigned f_convert(const string& str);
 
void f_strDevide(string& number, string& result)
{
    string forReturn;
    
    auto temp(0u);
    for (auto head(number.cbegin()), cur(head), end(number.cend() - 1);
        head != end; ++head)
    {
        temp = f_convert(string(cur, head + 1));
 
        if (temp / 10)
        {
            forReturn += to_string(temp / 10);
            cur = head;
            temp = 0;
        }
        else if (!forReturn.empty())
        {
            forReturn.push_back('0');
        }
    }
}
 
string f_toDec(string hex)
{
    string result;
 
    while (hex.size() > 1)
        f_strDevide(hex, result);
 
    auto digit(f_fromHex(*hex.begin()));
    result += to_string(digit % 10);
 
    if (digit /= 10)
        result += to_string(digit);
 
    reverse(hex.begin(), hex.end());
    return result;
}
 
int main()
{
    string number("1FFFF");
    system("pause");
}
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
13.07.2016, 17:05
Если код есть, то его надо писать в первом сообщении, а не в 35м. Причем писать с комментариями, зачем, что и как делаешь. Вместе со словесным описанием алгоритма, который реализует этот код. Тогда будет видно, где и какие ошибки и времени (нашего и вашего) будет потрачено меньше, а толку будет больше.
Вот, как-то так
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
13.07.2016, 17:15  [ТС]
И я ума не приложу, как так в голове продумать алгоритм, чтобы он был обобщенным, а не охватывал лишь частные случаи..
Это я говорю не только о делении, а вообще обо всех возникающих задачах...

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

Да как вобще бороться с этой проблемой?
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
13.07.2016, 17:24
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Да как вобще бороться с этой проблемой?
Практикой. Если сдаваться, то не справитесь
И отчаиваться не надо, если не получается
Всё равно рано или поздно одолеете.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
13.07.2016, 17:46
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Да как вобще бороться с этой проблемой?
Мне кажется, в таких случаях надо несколько снизить сложность решаемых задач. Натренироваться и почувствовать себя уверенно на простых, а потом постепенно усложнять. Ну и потом рассматриваемая задача не столько на программирование, сколько математическая, про позиционные системы счисления не вредно было бы в процессе решения почитать.
1
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
14.07.2016, 15:10
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
И я ума не приложу, как так в голове продумать алгоритм, чтобы он был обобщенным, а не охватывал лишь частные случаи.
Для начала надо придумать и реализовать алгоритм, который решает конкретную поставленную задачу: для этой надо час-два максимум. А не сидеть 3 дня в раздумьях "как бы решить задачу в общем". Если в процессе решения возникнет возможность обобщения, причем за счет небольших усилий, то пожалуйста. Иначе будет так: время потрачено, а результата нет.
От программиста нужен результат, а не медитации и объяснения типа "хотел обобщить, сделать лучше, эффективнее, но не получилось". Все обобщения и улучшения - после (если они окажутся действительно необходимыми). Что на самом деле лучше выясняется в процессе реализации, а не в процессе многодневного "нечегонеделания".
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.07.2016, 15:10
Помогаю со студенческими работами здесь

Из HEX в DEC
Вопрос ламерский каюсь, но что то пробовал по разному, но не работает никак))) есть у меня число например uint8_t q = 0x55, мне нужно...

Из HEX в DEC
Господа привет. Помогите нубу из F6FD hex получить -522 dec. int a = 0xFD; int b = 0xF6 &lt;&lt; 8; int res = a | b; у меня выводит...

Задача 4: перевод числа записанное в HEX с учетом знака в DEC
4) Напишите программу, которая переводит число (возможно, отрицательное), записанное в шестнадцатеричной системе, в десятичную систему. ...

Перевод из HEX в DEC
Ситуация такая: надо из HEX сделать десятичные значения While ((Not Eof(f)) And (FilePos(f)&lt;=rz)) Do Begin ...

перевод из hex в dec
люди можете подсказать, эта программа правильная перевод двухбайтного из hex в dec.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru