|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
|
Alexey68 |
|
|||
Alexey Профиль Группа: Участник Сообщений: 98 Регистрация: 10.4.2013 Репутация: нет Всего: нет |
Здравствуйте All!
При чтении с ком порта к байту впереди добавляются "лишние" байты FFFFFF, из-за чего это происходит?
Пример ответа: 90 FFFFFF43 76 FFFFFF32 88 FFFFFF29 Причём ответ с порта правильный, если бы не добавляемые FFFFFF. Прошу Вашей помощи. |
|||
|
||||
GremlinProg |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
скорее всего, это происходит из-за "дополнения до единицы"
можно проверить:
так ни чего лишнего не выводит? -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Alexey68 |
|
||||
Alexey Профиль Группа: Участник Сообщений: 98 Регистрация: 10.4.2013 Репутация: нет Всего: нет |
GremlinProg, Да, всё в порядке.
Благодарю, у меня ещё вопрос: Правилен ли следующий код:
при передаче массива байт например:
Это сообщение отредактировал(а) Alexey68 - 8.11.2016, 13:58 |
||||
|
|||||
feodorv |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Если Вы планируете использовать функцию strlen (вместо простой и внятной передачи длины сообщения в качестве параметра функции Write_Com_3), то Вы обязаны завершить передаваемый этой функции буфер символом '\0' (и это ещё не говоря о возможности встретить нулевой символ в актуальных данных буфера). Ни command1, ни command2 не завершены нулём. Код не правилен.
Вот совершенно не понятна длина массива. Ничто не предвещает единицы Зачем второй strlen, если есть результат первого, да ещё и сохраненный в переменную? Почему результат выполнения WriteFile, содержащийся в этой переменной, не проверен? Возможна же неполная передача данных буфера. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
Alexey68 |
|
||||
Alexey Профиль Группа: Участник Сообщений: 98 Регистрация: 10.4.2013 Репутация: нет Всего: нет |
почему не понятно, 6 байт:
|
||||
|
|||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
||||
|
||||
Alexey68 |
|
|||
Alexey Профиль Группа: Участник Сообщений: 98 Регистрация: 10.4.2013 Репутация: нет Всего: нет |
если я добавлю 0, то принимающая сторона не поймёт команду (пробовал) Write_Com_3(command2+'\0');
|
|||
|
||||
feodorv |
|
||||
Эксперт Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Мы говорим о разных нулях. Я и xvr - о нуле, завершающим строчку:Тогда strlen(command2) вернет 6 (Вы ведь этого хотите, я никак не могу понять, или не этого?) И завершающий строчу ноль не будет передан по сети в качестве данных, портя команду. Но загадкой для меня остаётся использование strlen вообще, и для бинарных данных в частности. Так почему не так:
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
||||
|
||||
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |