Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/88: Рейтинг темы: голосов - 88, средняя оценка - 4.83
1 / 1 / 3
Регистрация: 08.09.2009
Сообщений: 103
1

Из шестнадцатеричной в десятичную

22.10.2012, 06:37. Показов 18380. Ответов 39
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
У меня есть фаил, с которого я считываю числа по 2 байта. В этих 2ух байтах содержится число в шестнадцатеричной системе, но мне нужно вывести его в десятичной. Подскажите пожалуйста как это сделать на C++
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.10.2012, 06:37
Ответы с готовыми решениями:

Написать рекурсивный алгоритм перевода из двоичной системы счисления в десятичную ( из восьмеричной и шестнадцатеричной в десятичную)
Написать рекурсивный алгоритм перевода из двоичной системы счисления в десятичную ( из восьмеричной...

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

Перегруженые функции (перевод числа из шестнадцатеричной системы счисления в десятичную)
Помогите, в консольке нужно ) Написать функцию которая переводит числа из шестнадцатеричной...

Рекурсивная функция: перевод натурального числа из шестнадцатеричной системы счисления в десятичную
написать рекурсивную функцию для перевода натурального числа с шестнадцатеричной системы счисления...

39
9 / 9 / 3
Регистрация: 11.10.2012
Сообщений: 118
22.10.2012, 14:18 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от kiruhka Посмотреть сообщение
Как считывать, я уже поняла, мне надо перевести считанное в десятичнуое число, чтобы 00 01h превратилось в 1d, а 00 27h в 39d
я непонял

00 01 в 1d
00 27h в 39d

а вам не кажется что вы просите перевести не в десятичную систему
просто 1d это в десятичной 29
0
Заблокирован
Автор FAQ
22.10.2012, 14:19 22
kiruhka, вот как это задание вижу я
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
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
 
int main()
{
    FILE * file        = NULL;
    char * szData      = NULL;
    char * szBuf       = NULL;
    char * szInfo      = 0;
 
    char szSignature[] = "    ";
    szSignature[0] = (char)0x20;
    szSignature[1] = (char)0x20;
    szSignature[2] = (char)0x20;
    szSignature[3] = (char)0x20;
    WORD wDEC      = 0;
    char szName[256]   = {0};
    long  Length       = 0;
    printf("Enter file name : ");
    scanf("%[^\n]", szName);
    file = fopen(szName, "r");
    if(!file)
        printf("Error open %s\n",szName);
    else
    {
        fseek(file, 0, SEEK_END);
        Length = ftell(file);
        fseek(file, 0, SEEK_SET);
        szBuf = (char *)malloc(Length*sizeof(char));
        if(!fread(szBuf,1,Length*sizeof(char),file))
            printf("Error reading %s",szName);
        else
        {
            szData = szBuf;
            szBuf  = strstr(szData,szSignature);
            if(!szBuf)
                printf("Cannot find signature\n");
            else
            {
                Length = strlen(szData) - strlen(szBuf);
                szInfo = (char *)malloc(Length*sizeof(char));
                strncpy(szInfo, szData, Length)[Length] = 0;
                printf("%s", szInfo);
                szBuf  = strchr(szBuf, 0x80);
                while(szBuf)
                {   
                    szBuf  = strchr(szBuf, 0x80);
                    printf("\tX = %d\n", szBuf[1]);
                    while(szBuf += 2)
                    {
                        if(*szBuf == (char)0x80)
                            break;
                        else
                            printf("Y = %d ", szBuf[1]);
                        if(szBuf += 2)
                        if(*szBuf == (char)0x80)
                            break;
                        else
                            printf("A = %d ", szBuf[1]);
                        system("pause");
                    }
                }
            }
        }
        free(szData);
        free(szInfo);
    }
    system("pause");
    return 0;
}
Миниатюры
Из шестнадцатеричной в десятичную  
Вложения
Тип файла: rar FileParser.rar (63.5 Кб, 4 просмотров)
1
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.10.2012, 14:30 23
Цитата Сообщение от kiruhka Посмотреть сообщение
Как считывать, я уже поняла, мне надо перевести считанное в десятичнуое число, чтобы 00 01h превратилось в 1d, а 00 27h в 39d
Там разве нет перевода шестнадцатиричного в десятичное? Это по вашему что:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
...
if (flag == 1)
        {
            str = str1 + str2; // создаём слово
            int a = 0;
            s << hex << str; // помещаем слово как число в hex виде в поток
            s >> a; // извлекаем десятичное число
            s.clear();
            
            p[i].push_back(a); // помещаем число в вектор
            
            f1(f, flag);
        }
...
0
Заблокирован
Автор FAQ
22.10.2012, 14:38 24
Немного подумав сделал вариант с HEX вот что выводит программа в этом случае
Миниатюры
Из шестнадцатеричной в десятичную  
0
-=ЮрА=-
22.10.2012, 14:41
  #25

Не по теме:

kiruhka, посмотрите оба вывода - в случае парсинга формата записей в виде 00DD где DD десятичное в пределах от -99-99 либо в формате HHHH запись WORD(это последний скрин) скажите потом какая из них верна

0
1 / 1 / 3
Регистрация: 08.09.2009
Сообщений: 103
22.10.2012, 14:53  [ТС] 26
Там таких больших значений быть не может, и отрицательных тоже. Значения Y варьируются от 0 до 200h, а X от до 600(грубо). Значение А тоже не должно быть многотысячным.
А мой код из поста 9 совсем неправильный?

Добавлено через 2 минуты
Цитата Сообщение от alsav22 Посмотреть сообщение
Там разве нет перевода шестнадцатиричного в десятичное? Это по вашему что:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
...
if (flag == 1)
        {
            str = str1 + str2; // создаём слово
            int a = 0;
            s << hex << str; // помещаем слово как число в hex виде в поток
            s >> a; // извлекаем десятичное число
            s.clear();
            
            p[i].push_back(a); // помещаем число в вектор
            
            f1(f, flag);
        }
...
я это не совсем понимаю. Посмотрите мой код из поста 9, он совсем не правильный?
0
Заблокирован
Автор FAQ
22.10.2012, 14:55 27
kiruhka, А можете написать парочку строчек верных значений, т.е именно такие какие они должны быть(у меня есть одно соображение на этот счёт)
Это правильные ответы

Цитата Сообщение от kiruhka Посмотреть сообщение
Y=00 01
A=00 27
Y=00 02
A=00 66
???
0
1 / 1 / 3
Регистрация: 08.09.2009
Сообщений: 103
22.10.2012, 15:09  [ТС] 28
да это правильные

Добавлено через 11 минут
я сейчас не могу написать больше, потому что файлы на работе, а я уже дома. Вы можете сами посмотреть, если откроете присланный мною фаил в far'е в hex режиме
0
Заблокирован
Автор FAQ
22.10.2012, 15:11 29
Цитата Сообщение от kiruhka Посмотреть сообщение
да это правильные
- тогда в файле по всей видимости не HEX числа причём если У-ки совпадают, то вот среди А даже близко таких значений как у вас нет, м.б в значениях А какой-то отстаток от целочисленного деления записан?

Вот оновленный цикл чтения
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
while(szBuf)
                {   
                    printf("\n\tX = 00%02d\n", szBuf[1]);
                    while(szBuf += 2)
                    {
                        if(*szBuf == (char)0x80)
                            break;
                        else
                            printf("Y = 00 %02d\n", int(szBuf[1]));
                        szBuf += 2;
                        if(!szBuf)
                            break;
                        else
                        if(*szBuf == (char)0x80)
                            break;
                        else
                            printf("A = 00 %02d\n", int(szBuf[1]));
                        system("pause");
                    }
                }
Миниатюры
Из шестнадцатеричной в десятичную  
0
1 / 1 / 3
Регистрация: 08.09.2009
Сообщений: 103
22.10.2012, 15:19  [ТС] 30
а откуда там минусы?
И все же мой код имеет жизнь? если нет то я даже не буду на нем зацикливаться. Я просто дилетант в С++ и мне некоторые записи и операторы не понятны

Добавлено через 1 минуту
И мне именно нужен массив , например io[X][Y]=A
0
Заблокирован
Автор FAQ
22.10.2012, 15:35 31
kiruhka, в вашем коде идёт однозначно какой-то остаток от деления либо вы что то опустили, я уже мозг себе сломал
Миниатюры
Из шестнадцатеричной в десятичную  
0
1 / 1 / 3
Регистрация: 08.09.2009
Сообщений: 103
22.10.2012, 15:46  [ТС] 32
какой там может быть остаток, если я даже не знаю как перевести в десятичные значения,а как в калькуляторе инженерном это реальзовывается
0
Заблокирован
Автор FAQ
22.10.2012, 15:59 33
Цитата Сообщение от kiruhka Посмотреть сообщение
какой там может быть остаток, если я даже не знаю как перевести в десятичные значения,а как в калькуляторе инженерном это реальзовывается
- какой какой, вам видней. Инфа в файл через зад писана вот и всё, просил дайте код пишиушй в файл - нет, структуру файла нормально распишите - тоже мрак, какие-то отрывки! Ели додумал, что надо модули в HEX печатать. Всё ваше задание мне больше не интересно - пытаюсь вам помочь а вы ещё нервничаете...
Миниатюры
Из шестнадцатеричной в десятичную  
1
1 / 1 / 3
Регистрация: 08.09.2009
Сообщений: 103
22.10.2012, 16:14  [ТС] 34
Я не нервничаю. Кодов записи в файл у меня нет и найти их нет возможности, структуру описала как могла, как я её понимаю.
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.10.2012, 16:45 35
kiruhka, мой вам совет: оставьте ваш код в покое (он вообще не понятно для чего) и сосредоточьтесь на понимании тех вариантов, которые вам предлагают. Вы уже второму человеку мозг ломаете.

Добавлено через 2 минуты
Поймите простую вещь: нет такого кода, который сможет правильно читать и обрабатывать информацию из файла любой структуры. Структура файла всё определяет. А у вас тут туман сплошной.
2
1 / 1 / 3
Регистрация: 08.09.2009
Сообщений: 103
22.10.2012, 16:51  [ТС] 36
Извините меня конечно, но не к кому мне обратиться больше,спасибо за помощь, извините что потратила ваше время
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.10.2012, 17:10 37
Вот вопрос.
Цитата Сообщение от kiruhka Посмотреть сообщение
Здравствуйте!
У меня есть фаил, с которого я считываю числа по 2 байта. В этих 2ух байтах содержится число в шестнадцатеричной системе, но мне нужно вывести его в десятичной. Подскажите пожалуйста как это сделать на C++
Вот ответ:
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
#include<iostream>
#include <sstream>
#include <string>
using namespace std;
 
 int main()
{
    setlocale(0, "");
    
    stringstream s;
    string str1, str2;
    
    cout << "Введите два числа в шестнадцатиричном виде (00 - FF): " << endl;
    cin >> str1 >> str2;
    
    str1 = str1 + str2; // создали слово
    cout << str1 << endl; // вывод слова в шестнадцатиричном виде
    
    s << hex << str1; // помещаем слово в поток
    
    int n;
    s >> n; // получаем десятичное значение слова
    
    cout << n << endl; // вывод слова в десятичном виде
    
    system("pause");
    return 0;
}
Используйте.
Миниатюры
Из шестнадцатеричной в десятичную  
1
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.10.2012, 17:16 38
Что непонятно в коде - спрашивайте.
0
Заблокирован
Автор FAQ
22.10.2012, 17:37 39
kiruhka, причём тут это
Цитата Сообщение от kiruhka Посмотреть сообщение
Извините меня конечно, но не к кому мне обратиться больше,спасибо за помощь, извините что потратила ваше время
вы просто поймите структура файла это как букварь, если букварь знаем не до конца, понять содержимое невозможно. Вот потому и гадаем - как же у вас там байты инфу представляют. Смотрите у вас после зигнатуры 4-ри пробела
20202020
если гексом байты идут так
80 DD 00 DD 00 DD 00 DD где DD значения -99 99 если выводить модуль DD как HEX получаются ответы на скрине из поста 33 т.е скажем 79 там это 70H + 9H = 121 в DEC и т.д.
0
Заблокирован
Автор FAQ
22.10.2012, 17:41 40
Вот последний вариант вывода, который могу предложить
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
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <windows.h>
 
int main()
{
    FILE * file        = NULL;
    char * szData      = NULL;
    char * szBuf       = NULL;
    char * szInfo      = 0;
 
    char szSignature[] = "    ";
    szSignature[0] = (char)0x20;
    szSignature[1] = (char)0x20;
    szSignature[2] = (char)0x20;
    szSignature[3] = (char)0x20;
    WORD  * wDEC      = 0;
    char szName[256]   = {0};
    long  Length       = 0;
    printf("Enter file name : ");
    scanf("%[^\n]", szName);
    file = fopen(szName, "r");
    if(!file)
        printf("Error open %s\n",szName);
    else
    {
        fseek(file, 0, SEEK_END);
        Length = ftell(file);
        fseek(file, 0, SEEK_SET);
        szBuf = (char *)malloc(Length*sizeof(char));
        if(!fread(szBuf,1,Length*sizeof(char),file))
            printf("Error reading %s",szName);
        else
        {
            szData = szBuf;
            szBuf  = strstr(szData,szSignature);
            if(!szBuf)
                printf("Cannot find signature\n");
            else
            {
                Length = strlen(szData) - strlen(szBuf);
                szInfo = (char *)malloc(Length*sizeof(char));
                strncpy(szInfo, szData, Length)[Length] = 0;
                printf("%s", szInfo);
                szBuf  = strchr(szBuf, 0x80);
                while(szBuf)
                {   
                    printf("\n\tX = 00%02d\n", szBuf[1]);
                    while(szBuf += 2)
                    {
                        if(*szBuf == (char)0x80)
                            break;
                        else
                            printf("Y = 00 %02d\n", abs(szBuf[1]));
                        szBuf += 2;
                        if(!szBuf)
                            break;
                        else
                        if(*szBuf == (char)0x80)
                            break;
                        else
                            printf("A = 00 %02d\n", abs(szBuf[1]));
                        system("pause");
                    }
                }
            }
        }
        free(szData);
        free(szInfo);
    }
    system("pause");
    return 0;
}
На скринште вывод значений в DEC
Миниатюры
Из шестнадцатеричной в десятичную  
1
22.10.2012, 17:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.10.2012, 17:41
Помогаю со студенческими работами здесь

Перевод из шестнадцатеричной в десятичную
Не правильно производит вычисления. var oct : string; dec : longint; i,j : byte; er,k :...

Перевод из шестнадцатеричной системы в десятичную
text = textbox1.text.Substring(14, 2); num = (long)Convert.ToInt32(text, 16); Тут text = 11,...

Подпрограмма из шестнадцатеричной системы в десятичную
Прошу помочь написать программу на паскале которую нужно разбить на подпрограммы. Цель такова - дан...

из шестнадцатеричной системы счисления в десятичную
написать программу переводящую целое число из шестнадцатеричной системы счисления в десятичную


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

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