Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: проблема с указателями  (Прочитано 6566 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Игорь
Гость
« : 09-12-2008 08:57 » 

Мужики и дамы!!!
Подскажите пожалуйста.
В чем проблема.....
Есть масив данных  типа UCHAR  ....скажем m_Buff  размером в 512 байт.
Его заполняю данными.
Мне нужно получить данные из масива в виде структуры с определенным смещением.

Скажем так.....

struct _SRTCT{
     USHORT   m1;
     USHORT m2;
     UCHAR   m3;
     USРORT   m4;
     USРORT   m5;
     UCHAR   m6;
}

скажем я хочу наложит структуру на буфер....

struct  _STRCT *   m_Struct;
m_Struct=(_STRCT *)(m_Buff+20);

далее я пытаюсь через структуру получить нужные мне данные.

USHORT  t1=m_Struct->m1;
USHORT  t2=m_Struct->m2;
UCHAR    t3=m_Struct->m3;
USHORT  t4=m_Struct->m4;
USHORT  t5=m_Struct->m5;
UCHAR    t6=m_Struct->m6;

вроде все проавильно? но вот в чем проблема.....
мне заранее известны приходящие данные и при отладке видно что первые 3 члена структуры правильные а далее происходит смещение и данные не соотвествуют реальности.....
Такое ощущение что компилятор резервирует в памяти для членов типа UCHAR не один байт а два.....

Подскажите пожалуста есть ли возможность указать компилятору правильно выделять память или я ошибаюсь гдето?  Улыбаюсь
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 09-12-2008 09:15 » 

Полагаю, не хватает
#pragma pack (1)
Записан
Игорь
Гость
« Ответ #2 : 09-12-2008 09:28 » 

пробую
Записан
Игорь
Гость
« Ответ #3 : 09-12-2008 09:32 » 

Вад ....большое спасибо....
работает....
вот что значит самоучка....надо лучше знать VisualC++....
еще раз спаибо
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 09-12-2008 09:45 » 

вернее, так

Код:
#pragma pack (push,1)
struct _SRTCT{
     USHORT   m1;
     USHORT m2;
     UCHAR   m3;
     USРORT   m4;
     USРORT   m5;
     UCHAR   m6;
};
#pragma pack (pop)
« Последнее редактирование: 09-12-2008 09:49 от Алексей1153++ » Записан

Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 09-12-2008 09:49 » new

Естественно. Всё надо делать аккуратно Улыбаюсь
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines