powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Неверно работает typedef struct на Visual Studio
12 сообщений из 12, страница 1 из 1
Неверно работает typedef struct на Visual Studio
    #38054924
Sergio75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Переношу проект с С++ Builder 6 на Visual Studio 2010 С++ использую тот же заглавный файл в котором находятся описания структур, эта структура ниже не верно отрабатывает в Visual Studio 2010

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
#ifndef byte
typedef unsigned char	byte;
#endif

#ifndef word
typedef unsigned short	word;
#endif

#ifndef dword
typedef unsigned int	dword;
#endif

#pragma pack(push, 8)
typedef struct
{
        word        svcId;
        word        logicalChNum;
        word        pmtPid;
        word        pcrPid;
        word        videoPid;
        word        isAc3           : 1;
        word        audioAuto       : 1;
        word        audioRes        : 1;
        word        audioPid        : 13;

        word        nameIndex;
        word        tpIdx;
        dword       favIdx;
        dword       caSystem;
        word        bouquetId;

        dword       tunerNum        : 2;        
        dword       isSkip          : 1;
        dword       isCas           : 1;
        dword       isLock          : 1;
        dword       isRenamed       : 1;
        dword       isUsedLcn       : 1;
        dword       isHd            : 1;
        dword       soundMode       : 3;
        dword       soundLevel      : 2;
        dword       isMosaic        : 1; 
        dword       deleteFlag      : 1;
        dword       subtPid         : 13;
        dword       usbTunerFlag    : 1;
        dword       isHBBTV         : 1;
        dword       resbits2        : 2;   
            
        dword       csProviderId    : 24;      
        dword       tunerBits       : 4;
        dword       resbits4        : 4;               
        dword       videoStreamType : 8;
        dword       audioStreamType : 8;
        dword       csCaSysId       : 16;       
        dword       curCaSystem;
        dword       cwKeyIndex;
} S_FDU_ServiceData;
#pragma pack(pop, 8)



вот в этот участок структуры неверно ложатся данные :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
        dword       tunerNum        : 2;        
        dword       isSkip          : 1;
        dword       isCas           : 1;
        dword       isLock          : 1;
        dword       isRenamed       : 1;
        dword       isUsedLcn       : 1;
        dword       isHd            : 1;
        dword       soundMode       : 3;
        dword       soundLevel      : 2;
        dword       isMosaic        : 1; 
        dword       deleteFlag      : 1;
        dword       subtPid         : 13;
        dword       usbTunerFlag    : 1;
        dword       isHBBTV         : 1;
        dword       resbits2        : 2; 



подскажите может какие то настройки компилятору нужно сделать чтобы он эти битове поля правильно разложил ?
Спасибо.
...
Рейтинг: 0 / 0
Неверно работает typedef struct на Visual Studio
    #38055059
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergio75,

а как это "правильно" ?
...
Рейтинг: 0 / 0
Неверно работает typedef struct на Visual Studio
    #38055104
Sergio75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот рисунки на которых все видно
...
Рейтинг: 0 / 0
Неверно работает typedef struct на Visual Studio
    #38055109
Sergio75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Неверно работает typedef struct на Visual Studio
    #38055116
Sergio75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VS2010
...
Рейтинг: 0 / 0
Неверно работает typedef struct на Visual Studio
    #38055121
Sergio75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
к примеру смотреть, должно быть isHd = 0 у студии isHd = 1
...
Рейтинг: 0 / 0
Неверно работает typedef struct на Visual Studio
    #38055279
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergio75,

А где видно что в студии и билдере одни и те же байты в памяти структуры?
Первый дамп он к чему относится: билдеру или студии?

Вообще начните с того что выведите в билдере и студии sizeof(S_FDU_ServiceData) и убедитесь что они равны.
...
Рейтинг: 0 / 0
Неверно работает typedef struct на Visual Studio
    #38055349
Sergio75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
первый рисунок это набор данных которые натягиваются на структуру размер данных = 48 байт и также sizeof(S_FDU_ServiceData) в билдере и студии равна 48 , на картинках видно что в Студии неверно вычисляются биты в средине структуры

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
        dword       tunerNum        : 2;        
        dword       isSkip          : 1;
        dword       isCas           : 1;
        dword       isLock          : 1;
        dword       isRenamed       : 1;
        dword       isUsedLcn       : 1;
        dword       isHd            : 1;
        dword       soundMode       : 3;
        dword       soundLevel      : 2;
        dword       isMosaic        : 1; 
        dword       deleteFlag      : 1;
        dword       subtPid         : 13;
        dword       usbTunerFlag    : 1;
        dword       isHBBTV         : 1;
        dword       resbits2        : 2;
...
Рейтинг: 0 / 0
Неверно работает typedef struct на Visual Studio
    #38055453
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergio75,

Вообще, по стандарту, порядок размещения битовых полей внутри слов каждый компилятор может выбирать какой ему удобно.
Поэтому, вполне может быть вы столкнулись как раз с такой ситуацией что в билдере и студии разный порядок.
...
Рейтинг: 0 / 0
Неверно работает typedef struct на Visual Studio
    #38055631
Anatoly MoskovskySergio75,

Вообще, по стандарту, порядок размещения битовых полей внутри слов каждый компилятор может выбирать какой ему удобно.
Поэтому, вполне может быть вы столкнулись как раз с такой ситуацией что в билдере и студии разный порядок.
А нельзя этот порядок как-то жестко задать в программе для переносимости, если допустим в своем прикладном протоколе использовать битовые поля?
...
Рейтинг: 0 / 0
Неверно работает typedef struct на Visual Studio
    #38055686
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
жестко задатьА нельзя этот порядок как-то жестко задать в программе для переносимости, если допустим в своем прикладном протоколе использовать битовые поля?Стандартное решение через дефайны:

Код: plaintext
1.
2.
3.
4.
5.
#define FLAG_A 0x01
#define FLAG_B 0x02
.... etc
int isFlagA(char field) { return field & FLAG_A; }
char setFlagA(char field) { return field | FLAG_A; }



За реальными примерами можно пойти в любую развитую библиотеку.
...
Рейтинг: 0 / 0
Неверно работает typedef struct на Visual Studio
    #38056029
Sergio75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
одно понял что в студии не так работает #pragma pack(push, 8), пришлось в структуру внести изменения для того чтобы можно было применить #pragma pack(push,1)
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Неверно работает typedef struct на Visual Studio
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]