| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Как правильно класть WORD, DWORD, BYTE |
| Автор: eXa 24.1.2008, 21:23 | ||||
Чем WORD, DWORD, BYTE между собой отличаются? Какая разница при чтении этих переменных
Как правильно записать 00 00 00 01 в DWORD, 00 01 в WORD, F4 A1 в BYTE. Можеть статьи есть какие?) |
| Автор: archimed7592 24.1.2008, 21:25 |
| eXa, чего, куда и откуда класть? Что за огрызок кода? В чём заключается сам вопрос? |
| Автор: eXa 24.1.2008, 21:30 |
| поправил... нечайно создал тему не дописав вопроса) |
| Автор: archimed7592 24.1.2008, 21:38 | ||
eXa,
Теперь такие моменты: 1. Засунуть в BYTE два байта(f4 a1) невозможно. 2. Именовать переменную 2_3 недопустимо. Добавлено через 5 минут и 18 секунд Размером. DWORD - 4 байта WORD - 2 байта BYTE - угадай сам И, соответственно, диапазоном возможных значений. |
| Автор: eXa 24.1.2008, 21:51 | ||
Печать:22f2a Почему выводит только packet.text_1 = 0x2A; packet.mat_1 = 0x2F; packet.text_2 = 0x0002; и почему идёт запись с конца? |
| Автор: archimed7592 24.1.2008, 22:05 |
| Смотри, есть такой тип int. AFAICS - на твоём компиляторе int занимает 4 байта. Форматной инструкцией %x ты говоришь printf'у вывести на экран одну переменную типа int в шестнадцатиричном виде, а передаёшь ты ему целую структуру размером, заведомо большим, чем размер int, но, т.к. printf не знает что именно ты ему передал, он может только "догадываться", основываясь на форматных инструкциях, которые ты ему указал. Т.к. ты попросил вывести число типа int он его и выводит, а то что там дальше ещё байты есть - ему до лампочки(я бы даже сказал, что это очень плохо, что ты передаёшь ему больше данных, чем заявил - может привести к повреждению стека). Добавлено через 4 минуты и 57 секунд http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA_%D0%B1%D0%B0%D0%B9%D1%82%D0%BE%D0%B2(http://en.wikipedia.org/wiki/Endianness лучше). |
| Автор: MAKCim 24.1.2008, 22:21 | ||
не может |
| Автор: archimed7592 24.1.2008, 22:36 |
Похоже, что ты прав |
| Автор: eXa 24.1.2008, 22:38 | ||||
Как я понимаю правильная запись для последующей передачи по сети будет выглядить так?
И как правильно тогда передавать данные? |
| Автор: MAKCim 24.1.2008, 22:44 |
правильно - это когда спецификация тождественна переданным данным |
| Автор: eXa 24.1.2008, 23:03 | ||||||
что тут правильней чем %x O_o
Мне главное очень важно знать, для передачи по сети, эта правильная запись?
|
| Автор: MAKCim 24.1.2008, 23:07 |
| eXa, в printf передавай значения полей структуры (согласно приведенной тобой спецификации), а не саму структуру |
| Автор: eXa 24.1.2008, 23:35 |
| MAKCim только по полям выводить, разве нельзя всю сразу? на то она и структура... |
| Автор: jonie 25.1.2008, 00:19 |
| можно все... вопрос зачем? вы главное не забывайте про 1) выранивание полей в структуре 2)необходимости того что вы делаете 3)в стек будет (у вас) вместо байта (Если вдруг захотите пихать его вообще) пихаться int ("особенность процессора") |
| Автор: archimed7592 25.1.2008, 07:38 |
Сообщения были разделены в тему http://forum.vingrad.ru/index.php?show_type=forum&showtopic=193068 |