Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Ferrari F1
=^_^=
506 / 402 / 88
Регистрация: 27.01.2015
Сообщений: 2,314
Записей в блоге: 1
Завершенные тесты: 1
#1

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

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

Привет, можете подсказать как можно перевести 16-ричное число произвольной длины (например, заданное с помощью строки) в десятичную сс? (также можно в строку)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Хрисипп
17 / 27 / 8
Регистрация: 09.02.2016
Сообщений: 212
10.07.2016, 16:36     Перевод числа из hex в dec #2
C++
1
2
int x=0xff;//любая длина
можно еще пользоваться форматированным вводом/выводом cin/cout.setf()/unsetf()
Добавлено через 1 минуту
непонятно что значит
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
заданное с помощью строки
Croessmah
Модератор
Эксперт CЭксперт С++
12877 / 7263 / 810
Регистрация: 27.09.2012
Сообщений: 17,943
Записей в блоге: 2
Завершенные тесты: 1
10.07.2016, 16:43     Перевод числа из hex в dec #3
Цитата Сообщение от Хрисипп Посмотреть сообщение
непонятно что значит
Что не понятного?
C++
1
std::string hexNumber = "FFAADA5343DADADAE45343FFFAFCEFFAADA5343DADADAE45343FFFAFCEFFAADA5343DADADAE45343FFFAFCE";
Цитата Сообщение от Хрисипп Посмотреть сообщение
C++
1
int x=0xff;//любая длина
Но не более заданной
Хрисипп
17 / 27 / 8
Регистрация: 09.02.2016
Сообщений: 212
10.07.2016, 16:57     Перевод числа из hex в dec #4
со строкой
C++
1
2
3
4
int x;
string s = "FF";
stringstream ss;  ss << std::hex << s;
ss >> x;
Croessmah
Модератор
Эксперт CЭксперт С++
12877 / 7263 / 810
Регистрация: 27.09.2012
Сообщений: 17,943
Записей в блоге: 2
Завершенные тесты: 1
10.07.2016, 17:07     Перевод числа из hex в dec #5
Цитата Сообщение от Хрисипп Посмотреть сообщение
со строкой
Не подойдет для указанной выше строки
HenryDukart
122 / 122 / 35
Регистрация: 05.10.2013
Сообщений: 455
Завершенные тесты: 2
10.07.2016, 17:11     Перевод числа из hex в dec #6
Ferrari F1, мне кажется, что вам придется писать упрощенный вариант длинной арифметики.
Ferrari F1
=^_^=
506 / 402 / 88
Регистрация: 27.01.2015
Сообщений: 2,314
Записей в блоге: 1
Завершенные тесты: 1
10.07.2016, 17:28  [ТС]     Перевод числа из hex в dec #7
Просто хотелось бы узнать хотя бы алгоритм перевода...
Я знаю про способ, где надо представить число в виде суммы произведений степеней основания шестнадцатеричной системы счисления, но он не подходит т.к. происходит переполнение
Хрисипп
17 / 27 / 8
Регистрация: 09.02.2016
Сообщений: 212
10.07.2016, 17:29     Перевод числа из hex в dec #8
Цитата Сообщение от Croessmah Посмотреть сообщение
Не подойдет для указанной выше строки
ну это уже самостоятельно решаются проблемы такого характера.
Ferrari F1
=^_^=
506 / 402 / 88
Регистрация: 27.01.2015
Сообщений: 2,314
Записей в блоге: 1
Завершенные тесты: 1
10.07.2016, 17:50  [ТС]     Перевод числа из hex в dec #9
Парни, кажись нашел способ без длинной арифметики...
Перевод числа из hex в dec
Хрисипп
17 / 27 / 8
Регистрация: 09.02.2016
Сообщений: 212
10.07.2016, 18:04     Перевод числа из hex в dec #10
Цитата Сообщение от 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
int main()
{
    char c[5] = { 'd','d','c','f','6' };
    int x = c[0] - 48; if (x>9) x -= 39;
    for (int f = 1;f < 5;f++) {
        switch (c[f]) {
        case '1': { x=x*16+1; break; }
        case '2': { x = x * 16 + 2; break; }
        case '3': { x = x * 16 + 3; break; }
        case '4': { x = x * 16 + 4; break; }
        case '5': { x = x * 16 + 5; break; }
        case '6': { x = x * 16 + 6; break; }
        case '7': { x = x * 16 + 7; break; }
        case '8': {  x = x * 16 + 8; break; }
        case '9': { x = x * 16 + 9; break; }
        case 'a': { x = x * 16 + 10; break; }
        case 'b': { x = x * 16 + 11; break; }
        case 'c': { x = x * 16 + 12; break; }
        case 'd': {  x = x * 16 + 13; break; }
        case 'e': {  x = x * 16 + 14; break; }
        case 'f': { x = x * 16 + 15; break; }
        }
    }
    cout << x;
    return 0;
}
zer0mail
Нарушитель
2321 / 1947 / 192
Регистрация: 03.07.2012
Сообщений: 6,970
Записей в блоге: 1
11.07.2016, 07:29     Перевод числа из hex в dec #11
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
как можно перевести 16-ричное число произвольной длины (например, заданное с помощью строки)
Если оно задано с помощью строки, то с точки зрения программы это еще не число - это строка. Числом оно станет, когда будет выполнено преобразование: строка - >int (или double или <МойБольшойТип> или еще какой-то числовой тип).
shepherd
25 / 25 / 18
Регистрация: 22.03.2016
Сообщений: 77
12.07.2016, 16:04     Перевод числа из hex в dec #12
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Парни, кажись нашел способ без длинной арифметики...
На языке си делается просто. Этот же алгоритм перевода можете применить в своей программе c++.


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
int main(){
int fivehun=dec_to_hex(500);
printf("hexadecimal = %x\n" ,fivehun );
printf("decimal = %d" ,hex_to_dec(fivehun) );
}
 
int dec_to_hex(int dec){
int hex=0;
hex=(int)(dec/10)*16;
hex+=dec%10;
return hex;
}
 
int hex_to_dec(int hex){
int dec=0;
dec=(int)(hex/16)*10;
dec+=hex%16;
return dec;
}
Croessmah
Модератор
Эксперт CЭксперт С++
12877 / 7263 / 810
Регистрация: 27.09.2012
Сообщений: 17,943
Записей в блоге: 2
Завершенные тесты: 1
12.07.2016, 16:07     Перевод числа из hex в dec #13
Цитата Сообщение от shepherd Посмотреть сообщение
На языке си делается просто.
Это везде делается просто.
Только этот способ не подойдет для ТС.
Сказано же:
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
число произвольной длины
т.е., оно может тупо не влезть в int, или long, или long long, или...
zer0mail
Нарушитель
2321 / 1947 / 192
Регистрация: 03.07.2012
Сообщений: 6,970
Записей в блоге: 1
12.07.2016, 17:49     Перевод числа из hex в dec #14
Цитата Сообщение от shepherd Посмотреть сообщение
На языке си делается просто. Этот же алгоритм перевода можете применить в своей программе c++.
Покажите, как применить для 12345678901234567890123456789012345678901234567890123456789012345678901234567890.

Добавлено через 4 минуты
Цитата Сообщение от Хрисипп Посмотреть сообщение
в моей дырявой голове это как-то так
Длинный case и не учтено, что c[f] может быть 'D', например.
HenryDukart
122 / 122 / 35
Регистрация: 05.10.2013
Сообщений: 455
Завершенные тесты: 2
12.07.2016, 18:20     Перевод числа из hex в dec #15
Цитата Сообщение от HenryDukart Посмотреть сообщение
Ferrari F1, мне кажется, что вам придется писать упрощенный вариант длинной арифметики.
Повторюсь еще раз.
Ferrari F1
=^_^=
506 / 402 / 88
Регистрация: 27.01.2015
Сообщений: 2,314
Записей в блоге: 1
Завершенные тесты: 1
12.07.2016, 19:56  [ТС]     Перевод числа из hex в dec #16
нужно только реализовать алгоритм деления в столбик на 10
zer0mail
Нарушитель
2321 / 1947 / 192
Регистрация: 03.07.2012
Сообщений: 6,970
Записей в блоге: 1
12.07.2016, 20:19     Перевод числа из hex в dec #17
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
нужно только реализовать алгоритм деления в столбик на 10
Если длинное число состоит из блоков, кратных степени 10, то делить не надо. Надо реализовывать сложение с целым и умножение на целое.
Ferrari F1
=^_^=
506 / 402 / 88
Регистрация: 27.01.2015
Сообщений: 2,314
Записей в блоге: 1
Завершенные тесты: 1
12.07.2016, 20:29  [ТС]     Перевод числа из hex в dec #18
zer0mail, я не совсем понял, что вы имеете в виду. Как применить ваше правило к такому числу?
C++
1
std::string hexNumber = "FFAADA5343DADADAE45343FFFAFCEFFAADA5343DADADAE45343FFFAFCEFFAADA5343DADADAE45343FFFAFCE";
zer0mail
Нарушитель
2321 / 1947 / 192
Регистрация: 03.07.2012
Сообщений: 6,970
Записей в блоге: 1
12.07.2016, 21:12     Перевод числа из hex в dec #19
Я имею в виду, что длинную арифметику можно написать так, что для этой задачи деление не понадобится. Но длинную арифметику все равно надо делать (как уже дважды отметил HenryDukart). А результате получишь 572629701186791619150939769357775107963051058342508831759511936655229347335222402996971326188895252492238
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2016, 21:26     Перевод числа из hex в dec
Еще ссылки по теме:

C++ Чтение файла GIF. Перевод текста в HEX. Декодирование GIF анимации
Манипуляторы dec hex setfill setw C++
C++ Как разбить одно число HEX число на два числа HEX ?
C++ Из Hex в Dec
Перевод string в hex C++

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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6411 / 3050 / 300
Регистрация: 04.12.2011
Сообщений: 8,237
Записей в блоге: 3
12.07.2016, 21:26     Перевод числа из hex в dec #20
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
#include <iostream>
#include <string> 
using namespace std;
 
int decimal_from_hex_char(char hex)
{
char ret;
if(hex>'0'-1 && hex < '9'+1) ret = hex-'0';
if((hex>'A'-1 && hex < 'F'+1)) ret = 10 + hex - 'A';
if((hex>'a'-1 && hex < 'f'+1)) ret = 10 + hex - 'a';
return ret;
}
string reverse_str(string &str)//г...кодить так уж отдуши))
{
string rev("");
int len=str.size();
for(int i = len-1; i>-1; --i)
{
    rev+=str[i];
}
return rev;
}
 
char char_from_dec(int a){return '0'+a;}
 
string convert_hex_to_decimal(string & hex_str)
{
    string dec_str("");
    int len=hex_str.size(), overlap=0, current;
for(int i = len-1; i>-1; --i)
{
current=overlap+decimal_from_hex_char(hex_str[i]);
overlap=current/10;
dec_str+=char_from_dec(current%10);
}
if(overlap>0)
{
current=overlap;
overlap=current/10;
dec_str+=char_from_dec(current%10);
}
if(overlap>0)dec_str+=char_from_dec(overlap);
return reverse_str(dec_str);
}
 
void main()
{
    char hexes[]={'1', '2', 'A', 'C', 'c', 'f'}; 
for(int i=0; i<6; ++i)cout<< hexes[i]<<" ";
cout<<endl;
for(int i=0; i<6; ++i)cout<< decimal_from_hex_char(hexes[i])<<" ";
cout<<endl;
string hex_str="1AFF";
cout<<hex_str<<endl;
string dec_str=convert_hex_to_decimal(hex_str);//2165
 
cout<<dec_str<<endl;
system("pause");    
}
Если ошибок нет, то этого не может быть.
Yandex
Объявления
12.07.2016, 21:26     Перевод числа из hex в dec
Ответ Создать тему
Опции темы

Текущее время: 10:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru