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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.81
kiruhka
1 / 1 / 0
Регистрация: 08.09.2009
Сообщений: 103
#1

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

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

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

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

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

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

Вывод в шестнадцатеричной системе - C++
Нужно написать программу, которая выводит символы от А до Z в таблице. Первый столбец - порядковый номер, второй - сам символ, третий -...

шестнадцатеричной системы в двоичную и наоборот. - C++
Разработка программы перевода чисел из шестнадцатеричной системы в двоичную и наоборот.

работа с записью числа в шестнадцатеричной сс - C++
Доброго времени суток. Помогите, пожалуйста, с лабораторкой. На ввод даётся целое число. Необходимо проверить, является ли запись этого...

Побитовые операции, работа с шестнадцатеричной записью - C++
Добрый вечер. Цель лабы обработка числовой информации, работа с побитовыми операциями. Сама задача: Дано длинное целое неотрицательное...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kiruhka
1 / 1 / 0
Регистрация: 08.09.2009
Сообщений: 103
22.10.2012, 11:11  [ТС]     Из шестнадцатеричной в десятичную #16
Я и не думаю, что там массив, массив надо создать самой. если смотреть в Far'е в Hex то все понятно. Структуру я знаю, но объяснить её сложно.
Строки мы пропускаем они мне не нужны, данные начинаются с начала закорючек.
Каждые 2 байта это нужное мне число в шестнадцатиричном виде, только мне надо записать его в массив в виде десятичного
-=ЮрА=-
Заблокирован
Автор FAQ
22.10.2012, 11:24     Из шестнадцатеричной в десятичную #17
Цитата Сообщение от kiruhka Посмотреть сообщение
Структуру я знаю, но объяснить её сложно.
- ну вот без её знания считать простому обывателю инфу крайне затруднительно

Цитата Сообщение от kiruhka Посмотреть сообщение
Каждые 2 байта это нужное мне число в шестнадцатиричном виде, только мне надо записать его в массив в виде десятичного
- 2 байта начиная с какой позиции?
Вам всё понятно потому, что вы знаете как лежат данные, а лично мне не понятно как они лежат. Считать в int с конвертом из HEX в DEC очень легко - вот так
C
1
2
int buffer;
fscanf(f,"%X",&bufer);
но с какой позиции это делать не ясно, а вы явно экономите не пояснениях
kiruhka
1 / 1 / 0
Регистрация: 08.09.2009
Сообщений: 103
22.10.2012, 11:35  [ТС]     Из шестнадцатеричной в десятичную #18
Попробую объяснить
Сначала идет всякая ненужная инфа, если смотреть в hex то она идет до тех пор пока не встретятся 4 нулевых байта. Начиная со значения 80 01 начинаются данные.
Данные представляются следующим образом(объясняю на начале файла)
80 01 - это координата Х=1, там могло быть и 00 01, но 80=это просто метка, чтобы отличить где начинается следующий Х
Далее идет чередование значений Y и A:
Y=00 01
A=00 27
Y=00 02
A=00 66 и так далее, до следующего Х=80 02
Надеюсь понятно.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.10.2012, 11:50     Из шестнадцатеричной в десятичную #19
-=ЮрА=-, можете здесь почитать переписку Как считывать информация с файла по байтам
kiruhka
1 / 1 / 0
Регистрация: 08.09.2009
Сообщений: 103
22.10.2012, 14:05  [ТС]     Из шестнадцатеричной в десятичную #20
Как считывать, я уже поняла, мне надо перевести считанное в десятичнуое число, чтобы 00 01h превратилось в 1d, а 00 27h в 39d
хАЛЕКСЕЙх
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
5416 / 4812 / 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");
                    }
                }
Миниатюры
Из шестнадцатеричной в десятичную  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2012, 15:19     Из шестнадцатеричной в десятичную
Еще ссылки по теме:

Представление чисел в восьмеричной и шестнадцатеричной системах счисления - C++
У меня есть вопросы по переводу чисел из десятичной системы счисления в восьмеричную и шестнадцатеричную. Как перевести число с...

Преобразование записи числа в шестнадцатеричной СС в unsigned long - C++
Как получить из строки (&quot;168A4C&quot;) число в 16с/с? (1477196) char str = &quot;168A4C&quot;; unsigned long num = (unsigned long)str; ...

Как выглядит восьмибитная маска в шестнадцатеричной форме? - C++
прохожу тест дабы найти белые пятная в знании(коих пугающих много). Может есть кто понимает о чем этот вопрос вообще? как выглядит...

Найти сколько чисел на отрезке [x;y] начинаются с цифры 8 в шестнадцатеричной записи - C++
Написать программу метками. Найти сколько чисел на отрезке начинаются с цифры 8 в шестнадцатеричной записи. использовать s-прибавление...

Найти сколько чисел на отрезке x; y начинаются с цифры 8 в шестнадцатеричной записи - C++
Ребят, у меня вопрос! зависит ли от того, в какой системе первоначально даны х и у найти сколько чисел на отрезке x;y начинаются с...


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

Или воспользуйтесь поиском по форуму:
kiruhka
1 / 1 / 0
Регистрация: 08.09.2009
Сообщений: 103
22.10.2012, 15:19  [ТС]     Из шестнадцатеричной в десятичную #30
а откуда там минусы?
И все же мой код имеет жизнь? если нет то я даже не буду на нем зацикливаться. Я просто дилетант в С++ и мне некоторые записи и операторы не понятны

Добавлено через 1 минуту
И мне именно нужен массив , например io[X][Y]=A
Yandex
Объявления
22.10.2012, 15:19     Из шестнадцатеричной в десятичную
Ответ Создать тему
Опции темы

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