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

Преобразование типа byte в десятичный - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.92
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
08.03.2011, 22:34     Преобразование типа byte в десятичный #1
Здравствуйте!

Читаю файл побайтово, записал в переменную byte a[2] соответственно 2 байта, которые находятся в 16ричной системе. В этих 2х байтах лежит размер. Так вот, мне нужно узнать этот размер в десятичной системе счисления. Подскажите пожалуйста как это сделать.

Например, число 4F12h.
Есть ли какая-нибудь стандартная функция. Калькулятором перевести могу, но нужно в коде на с++.
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2011, 22:34     Преобразование типа byte в десятичный
Посмотрите здесь:

C++ Преобразование типа переменной
C++ Последовательность после обработки надо записать в массив типа BYTE
Преобразование типа C++
Преобразование типа C++
C++ Неявное преобразование типа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
08.03.2011, 22:39     Преобразование типа byte в десятичный #2
Ortistx, в двух байтах может быть только два символа
и почему там размер в 16ной системе?

Добавлено через 1 минуту
C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
  const char* str = "4F12";
  int val;
  sscanf( str, "%x", &val );
  printf( "%d", val );
  return 0;
}
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
08.03.2011, 22:40  [ТС]     Преобразование типа byte в десятичный #3
alex_x_x, я читаю файл так: fread(a, 1, 2, f);
Насколько я понял, данные записываются туда в 16ричной.

Т.е. если мы представляем число в 16ричной, то в 2 байта может поместиться FFFFh, не так?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
08.03.2011, 22:43     Преобразование типа byte в десятичный #4
Ortistx, да, но это будут не символы
в символы они превратятся при выводе
GAME
 Аватар для GAME
22 / 22 / 3
Регистрация: 31.10.2009
Сообщений: 199
08.03.2011, 22:44     Преобразование типа byte в десятичный #5
Ortistx, зависит от того, что записано
Если записано например число инт, то его можно считать как 4 байта.
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
08.03.2011, 22:45  [ТС]     Преобразование типа byte в десятичный #6
да, но это будут не символы
Число? В какой системе?

Т.е. если я делаю так:

byte a;
fread(a, 1, 2, f);

что будет в a?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
08.03.2011, 22:52     Преобразование типа byte в десятичный #7
Ortistx, наверно зависит от того что вы читаете?
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
08.03.2011, 22:58  [ТС]     Преобразование типа byte в десятичный #8
я читаю jpeg-файл.
Насколько я знаю, все файлы состоят из нулей и единиц. Jpeg-файл тоже. Мне нужно прочитать этот файл побайтово. Для удобства jpeg-файл представляют в 16ичной системе. Собственно мне нужно обрабатывать эти 16ичные данные, а конкретно надо обработать определенные 2 байта, в которых содержится число. Я эти байты нашел. Теперь необходимо достать из них число в десятичной форме.

Читаю я так:

C++
1
2
3
4
    byte a[2];
    FILE *f;
    f = fopen("1.jpg", "rb");
    fread(a, 1, 2, f);
Как теперь увидеть, то что лежит в a в десятичной системе?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
08.03.2011, 23:12     Преобразование типа byte в десятичный #9
C
1
2
3
4
5
6
7
8
9
10
11
12
13
typedef unsigned char byte;
 
int main()
{
  byte b[2];
  int a = 1000;
  memcpy( &b, &a, 2 );
  printf( "%x_%x\n", b[0], b[1] );
  a = 0;
  memcpy( &a, b, 2 );
  printf( "%d\n", a );
  return 0;
}
Bash
1
2
e8_3
1000
Добавлено через 39 секунд
memcpy мне кажется самое удобное и правильное средство
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
08.03.2011, 23:30  [ТС]     Преобразование типа byte в десятичный #10
Спасибо.
А в тексте, который я привел, что же все-таки лежит в a?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
08.03.2011, 23:33     Преобразование типа byte в десятичный #11
там лежат два байта считанных из файла =)
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
08.03.2011, 23:36  [ТС]     Преобразование типа byte в десятичный #12
а в каком формате?

или суть в том, что там лежат 2 байта, а то в каком формате - зависит от того, как мы будем читать?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
11.03.2011, 20:11     Преобразование типа byte в десятичный #13
Ortistx, уясните что такое формат
все в памяти компьютера представлено единообразно
можно считать, что там хранятся числа
вопрос в их интерпретации и формате вывода
ну я не знаю
http://www.infosgs.narod.ru/quest_11.htm
когда вы выполняете чтение, вы получаете то что там лежало, а формат он пренципиален только для вывода
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
11.03.2011, 20:15  [ТС]     Преобразование типа byte в десятичный #14
alex_x_x, спасибо, это понял.

Так вот вопрос в том, что некоторые функции работают только с определенным форматом данных.
Вот у меня и стоит задача из формата byte[2] перевести это в число, которое можно будет использовать потом для разных задач, в том числе для выделения памяти.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
11.03.2011, 20:17     Преобразование типа byte в десятичный #15
ну это уже третье дело
какой смысл преобразования и в каком контексте?
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
11.03.2011, 20:23  [ТС]     Преобразование типа byte в десятичный #16
Я читаю файл. В файле встречается 2 байта, в которых записан размер некого участка в байтах. Т.е. например может быть такое:
0002h
или такое:
1000h

я пытаюсь прочесть эти 2 байта из программы так:
C++
1
2
BYTE size[2];
fread(size, 1, 2, f);
А затем мне надо записать это число, которое находится в size[2] в переменную типа int, чтобы затем я мог оперировать с этим числом, например выделить память соответствующего размера.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
11.03.2011, 20:42     Преобразование типа byte в десятичный #17
C
1
2
int nSize;
fread(&nSize, 1, 2, f);
C
1
2
3
4
5
6
7
8
int main()
{
  char arr[] = {0xff, 0x0};
  int i = 0;
  memcpy( &i, arr, 4 );
  printf( "%x", i ); 
  return 0;
}
c memcpy
GAME
 Аватар для GAME
22 / 22 / 3
Регистрация: 31.10.2009
Сообщений: 199
11.03.2011, 20:43     Преобразование типа byte в десятичный #18
Цитата Сообщение от Ortistx Посмотреть сообщение
А затем мне надо записать это число, которое находится в size[2] в переменную типа int
тогда уж short. Потому-что инт имеет размер 4 байта.
Вам вот такой вариант не подойдёт ?
C++
1
2
3
BYTE size[2];
fread(size, 1, 2, f);
short *num = (short*)size;
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
11.03.2011, 20:56  [ТС]     Преобразование типа byte в десятичный #19
GAME, не работает.
Вывожу cout<<num; выдает 0012FF18
Т.е. выдает почему-то 4 байта вообще.


alex_x_x
, с memcpy получилось. Хорошая функция. Она может работать с любыми типами данных?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2011, 20:57     Преобразование типа byte в десятичный
Еще ссылки по теме:

Преобразование типа C++
C++ Преобразование String в Byte C++
C++ Преобразование из HEX в BYTE

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

Или воспользуйтесь поиском по форуму:
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
11.03.2011, 20:57     Преобразование типа byte в десятичный #20
Ortistx, да более того она вообще желаем способ работы , те как мне кажется всегда правильно работает с big endian/little endian итп
Yandex
Объявления
11.03.2011, 20:57     Преобразование типа byte в десятичный
Ответ Создать тему
Опции темы

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