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

Есть структура, компилятор считывает некоторые её поля ТОЛЬКО из адресов, кратным двум, а их там нет! (полей), как быть? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Упрощение кода http://www.cyberforum.ru/cpp-beginners/thread513319.html
void Polynomials::print(){ // Вывод полинома int i; int k; // признак того, что очередной коэффициент равен 1 int f; // признак того, что коэффициент - первый по счету (0 значит первый по счету) for(i=0,f=0;i<por+1;i++) // пройти все коэффициенты if(koef!=0){ // если очередной не равен нулю k=(koef==1); // проверить его на равенство единице if(koef>0){ // если...
C++ Получить вывод команды оболочки - функция, обратная system() Доброго времени суток, товарищи! Расскажите, пожалуйста, существует ли в С++ функция, обратная по действию system(). То есть, если system() отправляет команду терминалу, то есть ли функция, считывающая ответ терминала на эту команду? Например, в символьный массив или строковую переменную? http://www.cyberforum.ru/cpp-beginners/thread513316.html
C++ Как можно упростить exp^CA (если вводимые числа 5 и 4)
Дана функция: Как можно упростить exp^CA(если вводимые числа 5 и 4), т.е C*A = 20 exp^20, не вводить ведь exp 20 раз Возможно ли упрощение данной формулы?
Программирование рекурсий. Преобразование числа в двоичное C++
Дано целое неотрицательное число n. Преобразовать его в двоичное число.
C++ Отсортировать элементы, предшествующие первому нулевому элементу по возрастанию http://www.cyberforum.ru/cpp-beginners/thread513278.html
Дан массив А(50). Отсортировать элементы, предшествующие первому нулевому элементу, по возрастанию алгоритмом «Сортировка вставками».
C++ Программирование рекурсий: отделить цифры данного числа и сложить межу собой Дано целое неотрицательное число n. Отделить цифры данного числа и сложить межу собой. подробнее

Показать сообщение отдельно
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
06.03.2012, 13:30     Есть структура, компилятор считывает некоторые её поля ТОЛЬКО из адресов, кратным двум, а их там нет! (полей), как быть?
То есть вот структура:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct TGAHEADER
{
         char   IdLength;
         char   ColourMapType;
         char   DataTypeCode;
         WORD    ColourMapOrigin;
         WORD    ColourMapLength;
         char   ColourMapDepth;
         WORD    x_Origin;
         WORD    y_Origin;
         WORD    Width;
         WORD    Height;
         char   BitsPerPixel;
         char   ImageDescriptor;
};
TGAHEADER tgaheader;
 
//И она располагается в каком-то файле Fire.tag, вот я её считал:
fread(&tgaHeader, 1/* sizeof(TGAHEADER)*/, 18, pFile);
Теперь как обратиться к полю BitsPerPixel? Вот так не обратиться!
C++
1
tgaHeader.BitsPerPixel
А потому, что предыдущее поле ColourMapOrigin считьывается не по смещению 3, где оно есть, а по смещению 4. НАверное, потому что word. Соттветственно и последующие поля считываются не оттуда, где они находятся, а с других адресов

Ну я извращаюсь щас всяко, так например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct TGAHEADER
{
         char   IdLength;
         char   ColourMapType;
         char   DataTypeCode;
         
         //Если понадобится один из пяти байтов, опять придётся извращаться
         char x [5];
 
         WORD    x_Origin;
         WORD    y_Origin;
         WORD    Width;
         WORD    Height;
         char   BitsPerPixel;
         char   ImageDescriptor;
};
Можно так ещё:
C++
1
*((char*)&tgaHeader+ 16;
Но это костыли какие-то, есть грамотный способ? Спасибо, кто откликнется!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 19:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru