Здравствуйте, возникла такая проблема, есть ком-порт (usb) связывает программу ПК и МК.
Передаем число до 65535. Оно кодируется двумя байтами и отсылается через ком-порт в ПК, или от ПК к МК.
Но вот в чем засада, при передаче числа больше 127, число приходит кривое, т.е. посылаем 1500, приходит 1363,
посылаем 150, приходит 63... до 127 все нормально доходит.
Может ли быть проблема с кодировками???
Причем, если передавать чистые байты, например 01 5Е,
то все нормально доходит, если же передать как символы, то число большее 127 плывет
Проблема в вашем коде. Где явно попутаны uint и int (когда заполняется буфер для передачи, либо на принимающей стороне - когда из буфера восстанавливаются числа).
Удобней всего сериализовать данные перед передачей, тогда такой проблемы не будет. А в том виде, что у вас, еще и будет проблема "конечности" — на big-endian машинах код тоже не будет работать.
Forger
Jun 19 2017, 08:16
Цитата(Ekka @ Jun 19 2017, 10:53)

Причем, если передавать чистые байты, например 01 5Е,
то все нормально доходит, если же передать как символы, то число большее 127 плывет
Вы ошиблись темой, вам
сюда лучше написать.
AlexandrY
Jun 19 2017, 10:22
Цитата(Ekka @ Jun 19 2017, 10:53)

Может ли быть проблема с кодировками???
Строки в Delphi нынче по умолчанию хранятся в unicode.
Поэтому надо передавать посимвольно и каждый символ конвертировать в байт.
Про Delphi - это я включил телепатию.