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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.92
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
#1

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

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

Здравствуйте!

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

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

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

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

Преобразование из HEX в BYTE - C++
Теперь у меня есть массив (строка) с хекскодами и я хочу ее преобразовать в BYTE, нашел вот такую функцию int hex( char c ) { ...

Вывести в консоль значение типа BYTE - C++
COLORREF pix=GetPixel(hdc,0,0); BYTE b=GetGValue(pix); std::cout<<b<<std::endl; В консоль выводится какие-то знаки, а мне нужно...

Последовательность после обработки надо записать в массив типа BYTE - C++
Дана последовательность символов типа CHAR и мне эту последовательность после обработки надо записать в массив типа BYTE. Далее массив...

"Преобразование" из uint8_t в byte [] - C++
Здравствуйте, такой вопрос Нужно преобразовать значение из uint8_t в массив byte То есть: Дано uint8_t s; byte d; s=15; (в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ortistx
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, чтобы затем я мог оперировать с этим числом, например выделить память соответствующего размера.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 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
GAME
23 / 23 / 3
Регистрация: 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;
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
11.03.2011, 20:56  [ТС] #19
GAME, не работает.
Вывожу cout<<num; выдает 0012FF18
Т.е. выдает почему-то 4 байта вообще.


alex_x_x
, с memcpy получилось. Хорошая функция. Она может работать с любыми типами данных?
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
11.03.2011, 20:57 #20
Ortistx, да более того она вообще желаем способ работы , те как мне кажется всегда правильно работает с big endian/little endian итп
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
11.03.2011, 21:02  [ТС] #21
У меня как раз little endian и чтобы ее использовать, я до ее вызова переставил байты местами. Это правильно так делать?
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
11.03.2011, 21:04 #22
Цитата Сообщение от GAME Посмотреть сообщение
тогда уж short. Потому-что инт имеет размер 4 байта.
это не страшно - запишется куда надо
Цитата Сообщение от Ortistx Посмотреть сообщение
У меня как раз little endian и чтобы ее использовать, я до ее вызова переставил байты местами. Это правильно так делать?
нет, она как раз и предназначена, чтобы так не делать и вообще об этом не думать )
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
11.03.2011, 21:13  [ТС] #23
А как, она сама определит какой порядок байтов?
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
11.03.2011, 21:22 #24
Ortistx, а я подумал - без разницы в int'e такой же порядок байтов, поэтому она тупо копирует
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
11.03.2011, 21:41  [ТС] #25
Понтно. Спасибо, alex_x_x
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
11.03.2011, 22:19 #26
Цитата Сообщение от alex_x_x Посмотреть сообщение
Цитата Сообщение от Ortistx Посмотреть сообщение
У меня как раз little endian и чтобы ее использовать, я до ее вызова переставил байты местами. Это правильно так делать?
нет, она как раз и предназначена, чтобы так не делать и вообще об этом не думать )
Как-то странно все это. Функция memcpy тупо копирует последовательность байтов, следовательно число, записанное этой функцией в массив байтов, будет совпадать с прочитанным ею из этого массива, если запись и чтение производились на одной и той же платформе. Стандарт же файла
Цитата Сообщение от Ortistx Посмотреть сообщение
jpeg-файл
по идее не должен зависеть от платформы. Может быть все-таки выяснить что и куда там пишется?
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
11.03.2011, 22:24  [ТС] #27
Попробовал, если не менять байты местами, то выводится неправильное значение.

по идее не должен зависеть от платформы
да, так и есть.
GAME
23 / 23 / 3
Регистрация: 31.10.2009
Сообщений: 199
11.03.2011, 22:25 #28
Цитата Сообщение от Mr.X Посмотреть сообщение
Как-то странно все это. Функция memcpy тупо копирует последовательность байтов
да. всё так. Будь там LE или BE ей всё равно... она же только копирует байты и всё.
А в памяти, как я понимаю, байты идут так
X - char
XX - short
XXXX - int

То есть, если два char'a подряд получается шорт или инт(если остальные были обнулены)
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
11.03.2011, 22:33 #29
дык какой в стандарте порядок?
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
11.03.2011, 22:44  [ТС] #30
В стандарте jpeg порядок байт в 2-байтовых переменных отличается от Intel-стандарта, то есть сначала пишется старший байт, затем младший.
Насколько я знаю это порядок байт motorola'вский.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2011, 22:44
Привет! Вот еще темы с ответами:

Преобразование типа - C++
class ne { public: ne(); ~ne(); double x1; char l; }; ne O; ne::~ne(){};

Преобразование типа - C++
Есть числа типов int и double. Их надо преобразовать в тип char, чтобы записать их в поток(файл *.bin). И какая функция соединяет...

Преобразование типа - C++
Есть две переменные: CString m_strVal; long m_lVal; Как c помощью MFC преобразовать тип long в CString, чтобы можно было...

Преобразование типа переменной - C++
Как сделать что бы компилятор не отслеживал преобразование типов переменных Конкретней на примере: #include &lt;iostream&gt; #include...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.03.2011, 22:44
Ответ Создать тему
Опции темы

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