Опять про Struct

Тема в разделе "Общие вопросы по С и С++", создана пользователем debug, 26 май 2006.

Статус темы:
Закрыта.
  1. debug

    debug Гость

    Ниже я задавал подобный вопрос - незнание это плохо - но не нашёл ответов на следующий вопрос:
    Имеется код:
    Код (Text):
    struct SIGNAL_STATUS {
    char status_t;
    unsigned short gNumber;
    unsigned char sNumber;
    unsigned short info;
    unsigned short panel;
    };

    char temp[16];
    memset(temp, 0, 16);
    temp[0]=0x14;
    temp[1]=0;
    temp[2]=0x01;
    temp[3]=0x01;
    temp[4]=0;
    temp[5]=0;
    temp[6]=0;
    temp[7]=0x01;
    SIGNAL_STATUS *sg=(SIGNAL_STATUS*)temp;
    sg->status_t;
    sg->gNumber;
    sg->sNumber;
    sg->info;
    sg->panel;
    Резхультаты к сожалению не ожидаемые мной.
    Что я ожидал:
    sg->status_t=0x14
    sg->gNumber=0x0001
    sg->cNumber=0x01
    sg->info=0x0000
    sg->panel=0x0001

    что получаеться на самом деле:
    sg->status_t=0x14
    sg->gNumber=257
    sg->cNumber=0
    sg->info=256
    sg->panel=..

    Могу конечно ошибиться - но факт тот - что результат сильно отличается от ожидаемого.
    Что здесь может быть - выравнивание или сетевой порядок байт (похоже чем то), хотя думаю последнее тут не причём.
     
  2. debug

    debug Гость

    Немного разобрался с выравниванием - как мне ответили в предыдущем вопросе - объявил так
    Код (Text):
    #pragma pack(push,1)
    struct SIGNAL_STATUS {
    char status_t;
    unsigned short gNumber;
    unsigned char sNumber;
    unsigned short info;
    unsigned short panel;
    };
    #pragma pack(pop)
    Результат после этого стал таким (в предыдущем примере)
    sg->status_t=0x14
    sg->gNumber=256
    sg->cNumber=1
    sg->info=0
    sg->panel=256

    Вижу - что переменные структуры типа short видимо хранятся в памяти в обратном порядке байт.
    Почему - если я заполняю памать прямо, так видимо храняться переменные целых типов в памяти?
    И ещё вопрос - как избежать этого выравнивания по другому - я с такими проблемами ещё не встречался :) - очч неприятная вещь.
     
  3. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
Загрузка...
Похожие Темы - Опять про Struct
  1. vitte
    Ответов:
    10
    Просмотров:
    2.876
  2. Renat11111
    Ответов:
    8
    Просмотров:
    3.702
  3. sanch
    Ответов:
    7
    Просмотров:
    3.923
  4. makaset
    Ответов:
    26
    Просмотров:
    8.635
  5. Баламут
    Ответов:
    19
    Просмотров:
    6.079
Статус темы:
Закрыта.

Поделиться этой страницей