![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
princessik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 19.5.2011 Репутация: нет Всего: нет |
Здравствуйте, неожиданно возникла потребность упаковать в передаваемый пакет два числа по этой схеме:
![]() в совмещенном бите находятся самые младшие разряды обоих чисел, т.е если есть числа 1111 1111 1111 0000 и 0000 0000 0000 1111 то в совмещенном бите будут раздяды 0000 первого числа и разряды 1111 второго числа подскажите пожалуйста в чем ошибка??
долгота вроде правильно присылается, а вот с широтой что-то не то... Это сообщение отредактировал(а) princessik - 13.6.2015, 14:47 |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Есть сомнение: В результате бит номер три (если отсчитывать от нуля) тихо исчезает со сцены... Не понятна роль единицы. В совмещённом байте? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
princessik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 19.5.2011 Репутация: нет Всего: нет |
да, байте, опечатка
насчет единицы не знаю её роль, но а так не было студии под рукой чтобы проверить свой код, спасибо большое Это сообщение отредактировал(а) princessik - 14.6.2015, 09:35 |
|||
|
||||
princessik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 19.5.2011 Репутация: нет Всего: нет |
получается, теперь правильно?
Это сообщение отредактировал(а) princessik - 16.6.2015, 10:38 |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
princessik, здесь проще использовать битовые поля
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
baldina, вот только что делать в случает машин с другим порядком байт в словах?
|
|||
|
||||
princessik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 19.5.2011 Репутация: нет Всего: нет |
спасибо, но..каким образом data соответствует packet, это же получаются два разных поля? я как-то упаковывала в юнионы, там действительно есть свои подводные камни,
а со сдвигами всё-таки что не так? Это сообщение отредактировал(а) princessik - 16.6.2015, 12:57 |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
У Вас три бита откусываются на совмещённый байт. А здесьпочему-то считается, что их пять... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
bsa, можно так, например
в случае с явными битовыми операциями это ведь тоже учесть придется. а искать блох в семи копипастах дело имхо неблагодарное. поэтому отвечать на вопрос мне элементарно лень это union, так что data и packet занимают одну область памяти. получаются два разных представления одних и тех же данных, что вам и нужно. |
|||
|
||||
princessik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 19.5.2011 Репутация: нет Всего: нет |
то ли я чего то не понимаю, вообщем порядок должен быть таков что в 4м байте идут самые старшие биты, потом средние в 0м, 1м и самые младшие биты в 2м и со второй переменной точно так же
поэтому можно ли union из примера использовать?? Это сообщение отредактировал(а) princessik - 16.6.2015, 16:39 |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
big-endian? логично)))
union, и вообще любая структура, используют текущий для данной платформы порядок байт. поэтому, например, среднее слово (куда попадает единица между координатами) будет "перевернуто" даже при использовании битовых полей на платформе x86 (little endian). для преобразования в порядок big-endian (от старшего к младшему), который обычно используется для сетевой передачи, на любой платформе есть функции htonl, htons и тп. или см. мою ссылку выше. кстати union в примере необязателен, достаточно структуры с битовыми полями. а вот что и как в нее попадет зависит от порядка байт. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |