Ekka 0 19 июня, 2017 Опубликовано 19 июня, 2017 (изменено) · Жалоба Здравствуйте, возникла такая проблема, есть ком-порт (usb) связывает программу ПК и МК. Передаем число до 65535. Оно кодируется двумя байтами и отсылается через ком-порт в ПК, или от ПК к МК. Но вот в чем засада, при передаче числа больше 127, число приходит кривое, т.е. посылаем 1500, приходит 1363, посылаем 150, приходит 63... до 127 все нормально доходит. Может ли быть проблема с кодировками??? Причем, если передавать чистые байты, например 01 5Е, то все нормально доходит, если же передать как символы, то число большее 127 плывет Изменено 19 июня, 2017 пользователем Ekka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 19 июня, 2017 Опубликовано 19 июня, 2017 (изменено) · Жалоба Проблема в вашем коде. Где явно попутаны uint и int (когда заполняется буфер для передачи, либо на принимающей стороне - когда из буфера восстанавливаются числа). Удобней всего сериализовать данные перед передачей, тогда такой проблемы не будет. А в том виде, что у вас, еще и будет проблема "конечности" — на big-endian машинах код тоже не будет работать. Изменено 19 июня, 2017 пользователем Эдди Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 19 июня, 2017 Опубликовано 19 июня, 2017 · Жалоба Причем, если передавать чистые байты, например 01 5Е, то все нормально доходит, если же передать как символы, то число большее 127 плывет Вы ошиблись темой, вам сюда лучше написать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 19 июня, 2017 Опубликовано 19 июня, 2017 · Жалоба Может ли быть проблема с кодировками??? Строки в Delphi нынче по умолчанию хранятся в unicode. Поэтому надо передавать посимвольно и каждый символ конвертировать в байт. Про Delphi - это я включил телепатию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться