Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Ferrari F1
619 / 513 / 101
Регистрация: 27.01.2015
Сообщений: 2,978
Записей в блоге: 1
Завершенные тесты: 1
#1

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

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

Привет, можете подсказать как можно перевести 16-ричное число произвольной длины (например, заданное с помощью строки) в десятичную сс? (также можно в строку)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2016, 15:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перевод числа из hex в dec (C++):

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

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

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

S dec na hex, ukazatel - C++
Pomogite pojaluista! Etot kod menyaet 10noe chislo na 16noe. Nado izmenit eto chtoby zdes byl ukazatel i funkcia to est v int main() Tolko...

Как в С++ конвертнуть HEX в DEC? - C++
Киберперцы, есть ли готовая функция в Visual C++ для конвертации из HEX (типа F4A36) в DEC (типа 1002038) ?

Манипуляторы dec hex setfill setw - C++
что такое операторы dec hex setfill sew м как они работают?

40
Хрисипп
19 / 29 / 8
Регистрация: 09.02.2016
Сообщений: 217
10.07.2016, 16:36 #2
C++
1
2
int x=0xff;//любая длина
можно еще пользоваться форматированным вводом/выводом cin/cout.setf()/unsetf()
Добавлено через 1 минуту
непонятно что значит
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
заданное с помощью строки
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
10.07.2016, 16:43 #3
Цитата Сообщение от Хрисипп Посмотреть сообщение
непонятно что значит
Что не понятного?
C++
1
std::string hexNumber = "FFAADA5343DADADAE45343FFFAFCEFFAADA5343DADADAE45343FFFAFCEFFAADA5343DADADAE45343FFFAFCE";
Цитата Сообщение от Хрисипп Посмотреть сообщение
C++
1
int x=0xff;//любая длина
Но не более заданной
0
Хрисипп
19 / 29 / 8
Регистрация: 09.02.2016
Сообщений: 217
10.07.2016, 16:57 #4
со строкой
C++
1
2
3
4
int x;
string s = "FF";
stringstream ss;  ss << std::hex << s;
ss >> x;
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
10.07.2016, 17:07 #5
Цитата Сообщение от Хрисипп Посмотреть сообщение
со строкой
Не подойдет для указанной выше строки
0
HenryDukart
123 / 123 / 35
Регистрация: 05.10.2013
Сообщений: 457
Завершенные тесты: 2
10.07.2016, 17:11 #6
Ferrari F1, мне кажется, что вам придется писать упрощенный вариант длинной арифметики.
0
Ferrari F1
619 / 513 / 101
Регистрация: 27.01.2015
Сообщений: 2,978
Записей в блоге: 1
Завершенные тесты: 1
10.07.2016, 17:28  [ТС] #7
Просто хотелось бы узнать хотя бы алгоритм перевода...
Я знаю про способ, где надо представить число в виде суммы произведений степеней основания шестнадцатеричной системы счисления, но он не подходит т.к. происходит переполнение
0
Хрисипп
19 / 29 / 8
Регистрация: 09.02.2016
Сообщений: 217
10.07.2016, 17:29 #8
Цитата Сообщение от Croessmah Посмотреть сообщение
Не подойдет для указанной выше строки
ну это уже самостоятельно решаются проблемы такого характера.
0
Ferrari F1
619 / 513 / 101
Регистрация: 27.01.2015
Сообщений: 2,978
Записей в блоге: 1
Завершенные тесты: 1
10.07.2016, 17:50  [ТС] #9
Парни, кажись нашел способ без длинной арифметики...
Перевод числа из hex в dec
0
Хрисипп
19 / 29 / 8
Регистрация: 09.02.2016
Сообщений: 217
10.07.2016, 18:04 #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;
}
0
zer0mail
2372 / 2002 / 199
Регистрация: 03.07.2012
Сообщений: 7,192
Записей в блоге: 1
11.07.2016, 07:29 #11
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
как можно перевести 16-ричное число произвольной длины (например, заданное с помощью строки)
Если оно задано с помощью строки, то с точки зрения программы это еще не число - это строка. Числом оно станет, когда будет выполнено преобразование: строка - >int (или double или <МойБольшойТип> или еще какой-то числовой тип).
0
shepherd
25 / 25 / 18
Регистрация: 22.03.2016
Сообщений: 77
12.07.2016, 16:04 #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;
}
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
12.07.2016, 16:07 #13
Цитата Сообщение от shepherd Посмотреть сообщение
На языке си делается просто.
Это везде делается просто.
Только этот способ не подойдет для ТС.
Сказано же:
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
число произвольной длины
т.е., оно может тупо не влезть в int, или long, или long long, или...
0
zer0mail
2372 / 2002 / 199
Регистрация: 03.07.2012
Сообщений: 7,192
Записей в блоге: 1
12.07.2016, 17:49 #14
Цитата Сообщение от shepherd Посмотреть сообщение
На языке си делается просто. Этот же алгоритм перевода можете применить в своей программе c++.
Покажите, как применить для 12345678901234567890123456789012345678901234567890123456789012345678901234567890.

Добавлено через 4 минуты
Цитата Сообщение от Хрисипп Посмотреть сообщение
в моей дырявой голове это как-то так
Длинный case и не учтено, что c[f] может быть 'D', например.
0
HenryDukart
123 / 123 / 35
Регистрация: 05.10.2013
Сообщений: 457
Завершенные тесты: 2
12.07.2016, 18:20 #15
Цитата Сообщение от HenryDukart Посмотреть сообщение
Ferrari F1, мне кажется, что вам придется писать упрощенный вариант длинной арифметики.
Повторюсь еще раз.
1
12.07.2016, 18:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2016, 18:20
Привет! Вот еще темы с ответами:

Влияет ли манипуляторы hex,oct,dec на массив символов? - C++
Влияет ли манипуляторы hex,oct,dec на массив символов? есть unsigned char str; Ввожу и так cin &gt;&gt; hex &gt;&gt; str; и так cin &gt;&gt; str; ...

Как разбить одно число HEX число на два числа HEX ? - C++
Задача в том, что бы одно число в виде HEX (к примеру 0xD681) разбить на 2 числа HEX (из 0xD681 - &gt; 0xD6 и 0x81) именно что бы вот так...

Перевод данных в hex. - C++
Всем привет! char buffs = {&quot;\x01\x7f\x34\xb0\x80&quot;}; printf(&quot;%02X \n&quot;,buffs); // выводит 01 printf(&quot;%02X \n&quot;,buffs); // выводит 7F ...

Перевод string в hex - C++
Как перевести букву в шестнадцатеричный вид. Например: Г - это 0xC3; Получилось следующее: QString str = &quot;ПРИВЕТ&quot;; ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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