Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > С/С++
Перезагрузить страницу Как правильно работать с sizeof
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
b_gafurov b_gafurov вне форума
Новичок
 
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.04.2006
По умолчанию Как правильно работать с sizeof - 02.05.2006, 16:26

Код:
struct bits{ 
    unsigned partial_record_indicator : 3;
    unsigned valid_indicator : 3;
    unsigned clock_indicator : 2;
    unsigned free_indicator : 2;
    unsigned call_attempt_indicator : 2;
    unsigned complain_indicator : 2;
    unsigned cama_indicator : 1;
    unsigned is_credit_indicator : 1;
};
_________
cout<<sizeof(bits); vivodit 4, a ne 2 (16 bit), pochemu?
Ответить с цитированием
  (#2 (permalink)) Старый
Jonano Jonano вне форума
Специалист
 
Аватар для Jonano
 
Сообщений: 3,541
Сказал(а) спасибо: 2
Поблагодарили 14 раз(а) в 14 сообщениях
Регистрация: 19.04.2005
По умолчанию 02.05.2006, 16:27

Потому что тут ещё идёт выравнивание.
Ответить с цитированием
  (#3 (permalink)) Старый
b_gafurov b_gafurov вне форума
Новичок
 
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.04.2006
По умолчанию 02.05.2006, 16:40

Kak eto ponyat?
Ответить с цитированием
  (#4 (permalink)) Старый
Jonano Jonano вне форума
Специалист
 
Аватар для Jonano
 
Сообщений: 3,541
Сказал(а) спасибо: 2
Поблагодарили 14 раз(а) в 14 сообщениях
Регистрация: 19.04.2005
По умолчанию 02.05.2006, 16:44

Поищи по форуму, про выравнивание структур уже были обсуждения.
PS: sizeof() - не функция, а оператор. Он отрабатывает ещё на этапе компиляции.
Ответить с цитированием
  (#5 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию 02.05.2006, 17:29

Смотри в настройках компилятора Struct Member Alignment.
Либо через прагмы.
Подробная инфа - как обычно - в поиске и в MSDN.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
b_gafurov b_gafurov вне форума
Новичок
 
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.04.2006
По умолчанию 02.05.2006, 18:04

Dan file, i ego struktura
Цитата:
_________________________
Field Length(Bytes) (Offset)
csn 4 0
net_type 1 4
bill_type 1 5
check_sum 1 6
partial_record_indicator 0.5 7
valid_indicator 0.125 7.5
clock_indicator 0.125 7.625
free_indicator 0.125 7.75
call_attempt_indicator 0.125 7.875
complain_indicator 0.125 8
cama_indicator 0.125 8.125
is_credit_indicator 0.125 8.25
Spared 0.125 8.375
charge_party_indicator 0.5 8.5
ans_time 6 9
end_time 6 15
conversation_time 4 21
caller_dnset 2 25
caller_address_nature
Caller number address nature indicator 1 27
caller_number 10 28
called_dnset 2 38
called_address_nature 1 40
called_number 10 41
centrex_group_number 2 51
caller_ctx_number 5 53
called_ctx_number 5 58
trunk_group_in 2 63
trunk_group_out 2 65
caller_did 1 67
called_did 1 68
caller_category 1 69
call_type 0.5 70
Spare 0.5 70.5
gsvn 1 71
termination_code 1 72
Spared 0.25 73
round_mode 0.25 73.25
terminating_reason 0.5 73.5
Calling SS during the call 7 74
charging_case 2 81
rate 2 83
pulse_count 4 85
fee 4 89
connected_dnset 2 93
connected_address_nature 1 95
connected_number 10 96
charge_dnset 2 106
charge_address_nature 1 108
charge_number 10 109
bearer_service 1 119
teleservice 1 120
RxFlux 4 121
TxFlux 4 125
Address of Caller GK or SoftSwitch 4 129
Address of Caller GW or Terminal 4 133
Address of Callee GK or SoftSwitch 4 137
Address of Callee GW or Terminal 4 141
CodeType 1 145
UUS1 count 1 146
UUS2 count 1 147
UUS3 count 1 148
Reserved 1 149
CallerSrc 2 150
CalledSrc 2 152
PayerShortNumber 5 154
Code type video 1 159
Max Bit Rate 2 160
Reserved 4 162
pps_flag 0.125 166
np_call_flag 0.125 166.125
charging_method 0.25 166.25
incomplete_call_watch_type 0.25 166.5
caller_ISDN_access 0.125 166.75
called_ISDN_access 0.125 166.875
ISUP_indication 0.125 167
B_number 0.625 167.125
Spared 0.25 167.75
caller_seize_duration 4 168
called_seize_duration 4 172
dial_number 12 176
caller_module 1 188
called_module 1 189
caller_port_number 2 190
Called_port_number 2 192
called_category 1 194
supplementary_service_type 1 195
balance 4 196
OPC 4 200
DPC 4 204
release_index 2 208
Partial_counter 1 210
TMG_Circuits _seizure _time 6 211
TMG_Circuits _release _time 6 217
Billed_party 1 223
Reserved 26 224
Total 250Bytes
____________
Kak provilno chitat?

/* M: Не стесняемся использовать BBcode! S. */
Ответить с цитированием
  (#7 (permalink)) Старый
Jonano Jonano вне форума
Специалист
 
Аватар для Jonano
 
Сообщений: 3,541
Сказал(а) спасибо: 2
Поблагодарили 14 раз(а) в 14 сообщениях
Регистрация: 19.04.2005
По умолчанию 02.05.2006, 18:07

Цитата:
Originally posted by b_gafurov
[b]Kak provilno chitat?
Надо хорошенько подумать...
P.S.: изучи п.13 правил.
Ответить с цитированием
  (#8 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию 02.05.2006, 21:06

Цитата:
Originally posted by b_gafurov
[b]Kak provilno chitat?
Ты на верном пути. Проще всего создать соответствующую структуру и читать в неё. Нужно только отключить выравнивание границ структуры.
Ответить с цитированием
  (#9 (permalink)) Старый
b_gafurov b_gafurov вне форума
Новичок
 
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.04.2006
По умолчанию 03.05.2006, 09:37

А как, каким образом нужно отключить выравнивание границ структуры?
Ответить с цитированием
  (#10 (permalink)) Старый
Влад Влад вне форума
Специалист
 
Сообщений: 3,884
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
По умолчанию Re: problemma s Funskiy sizeof()??? - 03.05.2006, 11:44

Цитата:
Originally posted by b_gafurov+-->
Цитата:
cout<<sizeof(bits); выводит 4, а не 2 (16 bit), почему?
Размер sizeof(bits) не имеет отношения к выравниванию. Просто физическое представление этой структуры - int, поэтому sizeof(bits) == sizeof(int).
<!--QuoteBegin-b_gafurov

[b]А как, каким образом нужно отключить выравнивание границ структуры?
Код:
#pragma pack(push, 1)
// ... struct.... 
#pragma pack(pop)


The difference between theory and practice is that in theory, there is no difference between theory and practice, but in practice, there is.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно работать в VBA dutch69 Visual Basic 1 09.06.2011 17:47
Как правильно работать с VBA Oksi4ka Visual Basic 0 20.05.2011 12:54
Как правильно работать на php Илья Агарков Вопросы начинающих программистов 0 28.03.2011 12:49
Почему sizeof(x) после приведения x к типу double имеет значение 4 rusl Вопросы начинающих программистов 11 26.05.2009 11:24
Как правильно работать с Dev-Cpp Hagen С/С++ 0 04.12.2007 03:28
MMX как правильно работать SpLove Assembler 1 03.12.2006 14:46
Для чего нужен констурктор sizeof c++ С/С++ 3 02.05.2006 13:27
Как правильно работать с eVC++ fatboy Windows CE 15 31.03.2006 20:25
JSF EL как с ней правильно работать artgonch Java 0 26.12.2005 08:47
Как правильно работать с LPT Anton S Железо. Написание драйверов 4 04.06.2005 04:15
Какой оператор обрабатывает данные sizeof или strlen vilru Вопросы начинающих программистов 2 03.05.2004 20:34
Как правильно работать с Ant Anonymous Java 2 23.12.2002 16:26



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов