Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Формирование пакета данных 
:(
    Опции темы
Melevir
Дата 29.7.2009, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



Задача такая: нужно по COM порту отправить пакет заданной длинны (9 байт) заданного формата. С портом я разобрался - открыл, настроил, как передавать знаю. Не могу сам пакет сформировать. Сначала, как я понял, надо зарезервировать место в оперативной памяти (то ли GetMem(), то ли new...). Потом нужно в каждый байт записать свое значение. Предположим, в первый байт записать 1, во второй 2 и так далее.. Проблема как раз в том, что я не знаю, как это сделать. 
Помогите чайнику, а? Дайте пример...
PM MAIL   Вверх
mes
Дата 29.7.2009, 20:29 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Код

char Buf[9];

 smile 


--------------------
PM MAIL WWW   Вверх
Melevir
Дата 29.7.2009, 20:36 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



йо.. во я лох)))
PM MAIL   Вверх
GoldFinch
Дата 29.7.2009, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



Melevir, лучше сделай структуру, и ее посылай. это удобнее.
(а еще удобнее сделать сериализацию, а еще удобнее.... ...)
PM MAIL ICQ   Вверх
Melevir
Дата 29.7.2009, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



GoldFinch, а смысл? Тут и так все не сложно - объявил, заполнил как надо, в WriteFile() указал ссылку на buf[0] и длинну 9.. Куда уж проще?smile

Следующий вопрос пожалуй тут же задам.. Вот приходит мне в ответ на этот запрос такой же пакет, при чем я знаю, что в байтах 5..7 хранится signed integer. Как мне его выколупать?
Что нибудь в духе
Код

integer(&buf[0]+4)

пойдет?

Это сообщение отредактировал(а) Melevir - 29.7.2009, 21:02
PM MAIL   Вверх
Cheloveck
Дата 29.7.2009, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 3
Всего: 32



Цитата(Melevir @  29.7.2009,  21:57 Найти цитируемый пост)
байтах 5..7 хранится signed intege

5..7 - это три байта, интегер - 4.
Код

char buf[9]; // так у тебя приходит.
int x = *((int*)&buf[5])





--------------------
user posted image
PM Jabber   Вверх
andrew_121
Дата 29.7.2009, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Цитата(Melevir @  29.7.2009,  20:57 Найти цитируемый пост)
байтах 5..7 хранится signed integer

это 3 байта. Т.е. там 3 целых?
Код

char i1 = buf[5];
char i2 = buf[6];
char i3 = buf[7];



--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
azesmcar
Дата 29.7.2009, 21:09 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Melevir @  29.7.2009,  20:57 Найти цитируемый пост)
Следующий вопрос пожалуй тут же задам.. Вот приходит мне в ответ на этот запрос такой же пакет, при чем я знаю, что в байтах 5..7 хранится signed integer. Как мне его выколупать? 

Создай соответствующую своему пакету структуру и читай в нее
Код

struct message { /**/ }
ReadFile(hFile, &message, sizeof(message) ...);

Только вот не совсем понятно как это signed integer хранится в байтах 5..7? Размер integer-а не определен, но у тебя он скорее всего занимает 4 байта, если имеется ввиду unsigned short - тогда возможно. Но для переносимости лучше бы проверить размеры переменных в заголовочном файле limits и объявить правильную структуру.
Код

#if UINT_MAX == 0xFFFFFFFF
typedef int uint32_t;
#else
#error "Unsupported platform"
#endif

#if USHRT_MAX == 0xFFFF
typedef unsigned short uint16_t;
#else
#error "Unsupported platform"
#endif

что-то наподобие этого, теперь хотя бы получишь извещение о том, что размеры не соответствуют твоим ожиданиям на другой платформе и сделаешь все необходимое.
PM   Вверх
Melevir
Дата 29.7.2009, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



нее.. просто это как бы стандартный макет, в указанных трех байтах хранятся данные.. В моем случае данные - signed int... и вот еще одна непонятность - каким фигом инт в 3 байта запихнут...
Вариант Cheloveck'а подходит мне кажется, но вариант azesmcar'а красивей и наглядней.. Буду пробовать, спасибоsmile

Это сообщение отредактировал(а) Melevir - 29.7.2009, 21:24
PM MAIL   Вверх
jonie
Дата 29.7.2009, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



azesmcar главное не забыть про упаковку полей структуры, а-то начитаете...
Код

#pragma pack(push)
#pragma pack(1)
struct...
#pragma pack(pop)
это для VC подходит, насчет других компиляторов - почитайте их справку)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
azesmcar
Дата 29.7.2009, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(jonie @  29.7.2009,  22:28 Найти цитируемый пост)
azesmcar главное не забыть про упаковку полей структуры, а-то начитаете

совсем забыл про выравнивание. Куда же без него.


PM   Вверх
Cheloveck
Дата 30.7.2009, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 3
Всего: 32



Цитата(Melevir @  29.7.2009,  22:15 Найти цитируемый пост)
непонятность - каким фигом инт в 3 байта запихнут...

никаким. В 5-литровую бутылке 10 литров не нальёшь. Либо выливать половину надо.  smile 


--------------------
user posted image
PM Jabber   Вверх
GoldFinch
Дата 30.7.2009, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



далось вам то что "инт" - 4 байта.
есть диапазон значений, если он влезает в 3 байта - значит достаточно 3х байт. 
а то что это называют "инт" - значит значения целые.
PM MAIL ICQ   Вверх
Melevir
Дата 30.7.2009, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



GoldFinch, меня ввело в заблуждение то, что под любую инт переменную отводится именно 4 байта.. 
С тремя байтами разработчики весов там намудрили, разобрался я в этом..
Теперь я перед такой проблемой: в указанном выше пакете из 9и байт первые три надо отправить м единичным битом четности, остальные - с нулевым. Но бит четности - характеристика соединеия, разве нет? Как можно в одном пакете изменить эту настройку?
PM MAIL   Вверх
GoldFinch
Дата 30.7.2009, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



Melevir, по вашему вольному пересказу спецификации аппаратуры с которой вам надо работать, ничего не понятно. очевидно там гдето написано о каком "бите четности" речь.
PM MAIL ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.3807 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.