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

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

08.03.2011, 22:34. Показов 5266. Ответов 34
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!

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

Например, число 4F12h.
Есть ли какая-нибудь стандартная функция. Калькулятором перевести могу, но нужно в коде на с++.
Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.03.2011, 22:34
Ответы с готовыми решениями:

Глупый человек ищет умную мысль при сравнения массива типа byte с маскй типа byte.
Прошу помощи в виде объяснения в следующем вопросе. на вход программы поступает array of byte....

преобразование ref byte в byte[] или в IntPtr без использования неуправляемого кода
есть COM интерфейс с методом: virtual /* */ HRESULT STDMETHODCALLTYPE OnReceivePacket( ...

Как перевести byte[] или переменную типа IntPtr к типу byte[] (ассемблерные инструкции)?
Наткнулась на проблему, нужно перевести тип IntPtr в массив ассемблерной инструкции. Вот пример...

Преобразование двоичного кода в двоично-десятичный (PIC16F84)
Здравствуйте, вот задание: Декодирование входного 5-битного двоичного кода в 8-битный...

34
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
08.03.2011, 22:39 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;
}
0
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
08.03.2011, 22:40  [ТС] 3
alex_x_x, я читаю файл так: fread(a, 1, 2, f);
Насколько я понял, данные записываются туда в 16ричной.

Т.е. если мы представляем число в 16ричной, то в 2 байта может поместиться FFFFh, не так?
1
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
08.03.2011, 22:43 4
Ortistx, да, но это будут не символы
в символы они превратятся при выводе
0
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199
08.03.2011, 22:44 5
Ortistx, зависит от того, что записано
Если записано например число инт, то его можно считать как 4 байта.
0
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
08.03.2011, 22:45  [ТС] 6
да, но это будут не символы
Число? В какой системе?

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

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

что будет в a?
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
08.03.2011, 22:52 7
Ortistx, наверно зависит от того что вы читаете?
0
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
08.03.2011, 22:58  [ТС] 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 в десятичной системе?
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
08.03.2011, 23:12 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 мне кажется самое удобное и правильное средство
1
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
08.03.2011, 23:30  [ТС] 10
Спасибо.
А в тексте, который я привел, что же все-таки лежит в a?
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
08.03.2011, 23:33 11
там лежат два байта считанных из файла =)
0
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
08.03.2011, 23:36  [ТС] 12
а в каком формате?

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

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

я пытаюсь прочесть эти 2 байта из программы так:
C++
1
2
BYTE size[2];
fread(size, 1, 2, f);
А затем мне надо записать это число, которое находится в size[2] в переменную типа int, чтобы затем я мог оперировать с этим числом, например выделить память соответствующего размера.
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
11.03.2011, 20:42 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
1
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199
11.03.2011, 20:43 18
Цитата Сообщение от Ortistx Посмотреть сообщение
А затем мне надо записать это число, которое находится в size[2] в переменную типа int
тогда уж short. Потому-что инт имеет размер 4 байта.
Вам вот такой вариант не подойдёт ?
C++
1
2
3
BYTE size[2];
fread(size, 1, 2, f);
short *num = (short*)size;
1
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
11.03.2011, 20:56  [ТС] 19
GAME, не работает.
Вывожу cout<<num; выдает 0012FF18
Т.е. выдает почему-то 4 байта вообще.


alex_x_x
, с memcpy получилось. Хорошая функция. Она может работать с любыми типами данных?
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
11.03.2011, 20:57 20
Ortistx, да более того она вообще желаем способ работы , те как мне кажется всегда правильно работает с big endian/little endian итп
0
11.03.2011, 20:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.03.2011, 20:57
Помогаю со студенческими работами здесь

Преобразование BYTE C++
Здравствуйте! Столкнулся с такой проблемой, не могу вызвать функцию такого типа &quot;bool function...

Преобразование типа или преобразование типа указателя ?
Добрый день. Помогите пожалуйста понять что делает вот эта команда: out.write ((char *) &amp;n, sizeof...

Преобразование String в Byte C++
как преобразовать массив из string (или только string) в byte? допустим, есть массив: string...

Преобразование данных в byte[]
Здравствуйте! Часто сталкивался с проблемой при записи данных в файл или передачи через сокеты:...


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

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