805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
1

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

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

Author24 — интернет-сервис помощи студентам
Привет, можете подсказать как можно перевести 16-ричное число произвольной длины (например, заданное с помощью строки) в десятичную сс? (также можно в строку)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.07.2016, 15:37
Ответы с готовыми решениями:

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

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

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

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

40
19 / 29 / 13
Регистрация: 09.02.2016
Сообщений: 230
10.07.2016, 16:36 2
C++
1
2
int x=0xff;//любая длина
можно еще пользоваться форматированным вводом/выводом cin/cout.setf()/unsetf()
Добавлено через 1 минуту
непонятно что значит
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
заданное с помощью строки
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
10.07.2016, 16:43 3
Цитата Сообщение от Хрисипп Посмотреть сообщение
непонятно что значит
Что не понятного?
C++
1
std::string hexNumber = "FFAADA5343DADADAE45343FFFAFCEFFAADA5343DADADAE45343FFFAFCEFFAADA5343DADADAE45343FFFAFCE";
Цитата Сообщение от Хрисипп Посмотреть сообщение
C++
1
int x=0xff;//любая длина
Но не более заданной
0
19 / 29 / 13
Регистрация: 09.02.2016
Сообщений: 230
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
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
10.07.2016, 17:07 5
Цитата Сообщение от Хрисипп Посмотреть сообщение
со строкой
Не подойдет для указанной выше строки
0
125 / 125 / 44
Регистрация: 05.10.2013
Сообщений: 462
10.07.2016, 17:11 6
Ferrari F1, мне кажется, что вам придется писать упрощенный вариант длинной арифметики.
0
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
10.07.2016, 17:28  [ТС] 7
Просто хотелось бы узнать хотя бы алгоритм перевода...
Я знаю про способ, где надо представить число в виде суммы произведений степеней основания шестнадцатеричной системы счисления, но он не подходит т.к. происходит переполнение
0
19 / 29 / 13
Регистрация: 09.02.2016
Сообщений: 230
10.07.2016, 17:29 8
Цитата Сообщение от Croessmah Посмотреть сообщение
Не подойдет для указанной выше строки
ну это уже самостоятельно решаются проблемы такого характера.
0
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
10.07.2016, 17:50  [ТС] 9
Парни, кажись нашел способ без длинной арифметики...
Перевод числа из hex в dec
0
19 / 29 / 13
Регистрация: 09.02.2016
Сообщений: 230
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
2661 / 2236 / 240
Регистрация: 03.07.2012
Сообщений: 8,137
Записей в блоге: 1
11.07.2016, 07:29 11
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
как можно перевести 16-ричное число произвольной длины (например, заданное с помощью строки)
Если оно задано с помощью строки, то с точки зрения программы это еще не число - это строка. Числом оно станет, когда будет выполнено преобразование: строка - >int (или double или <МойБольшойТип> или еще какой-то числовой тип).
0
25 / 25 / 26
Регистрация: 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
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
12.07.2016, 16:07 13
Цитата Сообщение от shepherd Посмотреть сообщение
На языке си делается просто.
Это везде делается просто.
Только этот способ не подойдет для ТС.
Сказано же:
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
число произвольной длины
т.е., оно может тупо не влезть в int, или long, или long long, или...
0
2661 / 2236 / 240
Регистрация: 03.07.2012
Сообщений: 8,137
Записей в блоге: 1
12.07.2016, 17:49 14
Цитата Сообщение от shepherd Посмотреть сообщение
На языке си делается просто. Этот же алгоритм перевода можете применить в своей программе c++.
Покажите, как применить для 12345678901234567890123456789012345678901234567890123456789012345678901234567890 .

Добавлено через 4 минуты
Цитата Сообщение от Хрисипп Посмотреть сообщение
в моей дырявой голове это как-то так
Длинный case и не учтено, что c[f] может быть 'D', например.
0
125 / 125 / 44
Регистрация: 05.10.2013
Сообщений: 462
12.07.2016, 18:20 15
Цитата Сообщение от HenryDukart Посмотреть сообщение
Ferrari F1, мне кажется, что вам придется писать упрощенный вариант длинной арифметики.
Повторюсь еще раз.
1
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
12.07.2016, 19:56  [ТС] 16
нужно только реализовать алгоритм деления в столбик на 10
0
2661 / 2236 / 240
Регистрация: 03.07.2012
Сообщений: 8,137
Записей в блоге: 1
12.07.2016, 20:19 17
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
нужно только реализовать алгоритм деления в столбик на 10
Если длинное число состоит из блоков, кратных степени 10, то делить не надо. Надо реализовывать сложение с целым и умножение на целое.
0
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
12.07.2016, 20:29  [ТС] 18
zer0mail, я не совсем понял, что вы имеете в виду. Как применить ваше правило к такому числу?
C++
1
std::string hexNumber = "FFAADA5343DADADAE45343FFFAFCEFFAADA5343DADADAE45343FFFAFCEFFAADA5343DADADAE45343FFFAFCE";
0
2661 / 2236 / 240
Регистрация: 03.07.2012
Сообщений: 8,137
Записей в блоге: 1
12.07.2016, 21:12 19
Я имею в виду, что длинную арифметику можно написать так, что для этой задачи деление не понадобится. Но длинную арифметику все равно надо делать (как уже дважды отметил HenryDukart). А результате получишь 57262970118679161915093976935777510796305105834250883175951193665522934733522240 2996971326188895252492238
0
Комп_Оратор)
Эксперт по математике/физике
8945 / 4699 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
12.07.2016, 21:26 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");    
}
Если ошибок нет, то этого не может быть.
0
12.07.2016, 21:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.07.2016, 21:26
Помогаю со студенческими работами здесь

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru