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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.81
kiruhka
1 / 1 / 0
Регистрация: 08.09.2009
Сообщений: 103
22.10.2012, 06:37     Из шестнадцатеричной в десятичную #1
Здравствуйте!
У меня есть фаил, с которого я считываю числа по 2 байта. В этих 2ух байтах содержится число в шестнадцатеричной системе, но мне нужно вывести его в десятичной. Подскажите пожалуйста как это сделать на C++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2012, 06:37     Из шестнадцатеричной в десятичную
Посмотрите здесь:

Побитовые операции, работа с шестнадцатеричной записью C++
C++ шестнадцатеричной системы в двоичную и наоборот.
работа с записью числа в шестнадцатеричной сс C++
Представление чисел в восьмеричной и шестнадцатеричной системах счисления C++
C++ Написать рекурсивный алгоритм перевода из двоичной системы счисления в десятичную ( из восьмеричной и шестнадцатеричной в десятичную)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
хАЛЕКСЕЙх
 Аватар для хАЛЕКСЕЙх
8 / 8 / 2
Регистрация: 11.10.2012
Сообщений: 118
22.10.2012, 14:18     Из шестнадцатеричной в десятичную #21
Цитата Сообщение от kiruhka Посмотреть сообщение
Как считывать, я уже поняла, мне надо перевести считанное в десятичнуое число, чтобы 00 01h превратилось в 1d, а 00 27h в 39d
я непонял

00 01 в 1d
00 27h в 39d

а вам не кажется что вы просите перевести не в десятичную систему
просто 1d это в десятичной 29
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор 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 Кб, 3 просмотров)
alsav22
5282 / 4801 / 442
Регистрация: 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);
        }
...
-=ЮрА=-
Заблокирован
Автор FAQ
22.10.2012, 14:38     Из шестнадцатеричной в десятичную #24
Немного подумав сделал вариант с HEX вот что выводит программа в этом случае
Миниатюры
Из шестнадцатеричной в десятичную  
-=ЮрА=-
22.10.2012, 14:41
  #25

Не по теме:

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

kiruhka
1 / 1 / 0
Регистрация: 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, он совсем не правильный?
-=ЮрА=-
Заблокирован
Автор FAQ
22.10.2012, 14:55     Из шестнадцатеричной в десятичную #27
kiruhka, А можете написать парочку строчек верных значений, т.е именно такие какие они должны быть(у меня есть одно соображение на этот счёт)
Это правильные ответы

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

Добавлено через 11 минут
я сейчас не могу написать больше, потому что файлы на работе, а я уже дома. Вы можете сами посмотреть, если откроете присланный мною фаил в far'е в hex режиме
-=ЮрА=-
Заблокирован
Автор 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");
                    }
                }
Миниатюры
Из шестнадцатеричной в десятичную  
kiruhka
1 / 1 / 0
Регистрация: 08.09.2009
Сообщений: 103
22.10.2012, 15:19  [ТС]     Из шестнадцатеричной в десятичную #30
а откуда там минусы?
И все же мой код имеет жизнь? если нет то я даже не буду на нем зацикливаться. Я просто дилетант в С++ и мне некоторые записи и операторы не понятны

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

Добавлено через 2 минуты
Поймите простую вещь: нет такого кода, который сможет правильно читать и обрабатывать информацию из файла любой структуры. Структура файла всё определяет. А у вас тут туман сплошной.
kiruhka
1 / 1 / 0
Регистрация: 08.09.2009
Сообщений: 103
22.10.2012, 16:51  [ТС]     Из шестнадцатеричной в десятичную #36
Извините меня конечно, но не к кому мне обратиться больше,спасибо за помощь, извините что потратила ваше время
alsav22
5282 / 4801 / 442
Регистрация: 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;
}
Используйте.
Миниатюры
Из шестнадцатеричной в десятичную  
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.10.2012, 17:16     Из шестнадцатеричной в десятичную #38
Что непонятно в коде - спрашивайте.
-=ЮрА=-
Заблокирован
Автор 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 и т.д.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2012, 17:41     Из шестнадцатеричной в десятичную
Еще ссылки по теме:

Написать программу, которая переводит числа с шестнадцатеричной системы в десятичную C++
C++ Как выглядит восьмибитная маска в шестнадцатеричной форме?
Вывод в шестнадцатеричной системе C++

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор 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
Миниатюры
Из шестнадцатеричной в десятичную  
Yandex
Объявления
22.10.2012, 17:41     Из шестнадцатеричной в десятичную
Ответ Создать тему
Опции темы

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