![]() |
Модераторы: 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. |