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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


alex_x_x
, с memcpy получилось. Хорошая функция. Она может работать с любыми типами данных?
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
11.03.2011, 20:57
Ortistx, да более того она вообще желаем способ работы , те как мне кажется всегда правильно работает с big endian/little endian итп
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.03.2011, 20:57
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru