0 / 0 / 0
Регистрация: 25.02.2014
Сообщений: 10
|
||||||
1 | ||||||
Замена символа в string, которая не нужна25.02.2014, 21:32. Показов 1927. Ответов 10
Метки нет (Все метки)
В C# не имею достаточного опыта!
Получаю от контроллера через порт строку:
Но нужда заставила в некоторых байтах строки передавать (и соответственно получать) целое без знака до 255. Контроллер передает то что хочу. А вот в строке значения всех этих байтов заменяются на '?' (вопросительный знак)! Подскажите как решить проблему? Не хочется все переписывать на чтение по байтам (serialPort.ReadByte()).... Уже как-то с этим повозился...
0
|
25.02.2014, 21:32 | |
Ответы с готовыми решениями:
10
Замена символа String Замена символа в string Замена одного символа в String Анализ и замена символа в string |
273 / 241 / 56
Регистрация: 29.05.2012
Сообщений: 889
|
|
25.02.2014, 21:39 | 2 |
В контроллере когда формируете строку, нужно к каждому цифровому разряду прибавить ASCII значение знака '0'. У вас то всё передаётся, просто не отображается потому что коды не попадают. Разбирать строку придется всё равно, но за то вы будете сразу видеть передаваемые значения.
Сам почитал и еле понял что написал В общем вам нужно на стороне контроллера преобразовывать числовые значения в строковые и тогда только отсылать их со всей строкой.
0
|
0 / 0 / 0
Регистрация: 25.02.2014
Сообщений: 10
|
||||||||||||||||
25.02.2014, 22:18 [ТС] | 3 | |||||||||||||||
На стороне контроллера (Arduino) у меня есть буфер:
А когда попробовал в некоторые байты вставить так:
Добавлено через 2 минуты Забыл спросить! Что я не так делаю?
0
|
273 / 241 / 56
Регистрация: 29.05.2012
Сообщений: 889
|
|
25.02.2014, 22:36 | 4 |
255 это точно непечатаемый символ, он и выводится в виде ? .
Как строку получится посылать только печатаемые символы.
0
|
0 / 0 / 0
Регистрация: 25.02.2014
Сообщений: 10
|
|
25.02.2014, 22:39 [ТС] | 5 |
То есть "обойти" проблему никак нельзя...
0
|
273 / 241 / 56
Регистрация: 29.05.2012
Сообщений: 889
|
|
25.02.2014, 22:46 | 6 |
Какова у вас задача? Вы хотите передавать получается массив байт а не строку? Кодируйте каждое байтовое значение например в 16-ричное, строка увеличится всего лишь в 2-ва раза но тогда на стороне клиента вы сможете её полностью преобразовать в массив байт и уже с ним работать.
0
|
0 / 0 / 0
Регистрация: 25.02.2014
Сообщений: 10
|
|
26.02.2014, 00:08 [ТС] | 8 |
Мысль интересная, но порт "захлебывается"(теряются посылки вследствие большой частоты передачи) и при длине посылки 33 байта. Так что буду переделывать наверное на побайтовую обработку...
Спасибо. А вам приходилось работать с СОМ портами? Тяжелая штука в отладке из-за необходимости работы через потоки... Добавлено через 2 минуты Для Psilon. Мне нужно то что послано из контролера, не вставленный вместо него ? Добавлено через 1 минуту Т.е. 0хС3 Добавлено через 2 минуты Пардон 0х3F
0
|
Master of Orion
|
||||||
26.02.2014, 06:45 | 9 | |||||
Ansen2, ну так и переведите в число
0
|
0 / 0 / 0
Регистрация: 25.02.2014
Сообщений: 10
|
||||||
26.02.2014, 11:20 [ТС] | 10 | |||||
Psilon, уважаемый!
Я после выполнения
0
|
17790 / 12941 / 3381
Регистрация: 17.09.2011
Сообщений: 21,215
|
|
26.02.2014, 12:34 | 11 |
Сообщение было отмечено Ansen2 как решение
Решение
Правильно, вы же работаете с текстом, а для символов применимо такое понятие, как кодировка.
При считывании сырых байтов с порта и конвертировании их в строку (строки/символы в .NET представлены в кодировке UTF-16), вы преобразуете значение этих байтов в зависимости от используемой для считывания кодировки (свойство Encoding класса SerialPort). Например, если вы используете кодировку ASCII для считывания с порта, то все символы значением выше 127 будут преобразованы в вопросительные знаки, что вы и наблюдаете. Если вы будете использовать другую кодировку, где символ 255 представлен официально (например, в кодировке Win-1251 под номером 255 стоит буква "я"), то при конвертировании этого символа в UTF-16 ему будет присвоено значение того же символа, но уже в таблице UTF-16. То есть буква "я" из 255 превратится в 1103. То есть если вы посылате в порт числа, а не буквы, то и работайте с данными как с числами, а не буквами. Иначе потеря значений неизбежна. Вместо ReadLine используйте Read и передавайте массив байтов.
3
|
26.02.2014, 12:34 | |
26.02.2014, 12:34 | |
Помогаю со студенческими работами здесь
11
Замена символа в String без переписывания всей строки Замена данного символа на любое сочетание символов.(Тип данных string) Замена символа в строке на число соответствующему номеру по порядку вхождения этого символа в строку Замена символа на их сочетание - происходит множественная замена Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |