Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
1

Кодировки

28.03.2018, 20:29. Показов 960. Ответов 7
Метки нет (Все метки)

Здравствуйте. Такая проблема: получаю текстовые данные по Serial-порту (символы киррилицы) потом надо вернуть код этого символа. Но, вместо кода получаю 0 для а, 1 для б, 2 для в, и т.д. В чем проблема? (Код для ардуино)
Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const int ledPin = 13; 
unsigned char incomingbyte;
 
void setup() {
 
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}
 
void loop() {
  if (Serial.available() > 0) { 
    incomingbyte = Serial.read();
  }
  
 int a=(int)(incomingbyte);
 Serial.write(a);  
 delay(2000);
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.03.2018, 20:29
Ответы с готовыми решениями:

В чём отличия кодировки ms dos от кодировки ms windows?
Всем привет, подскажите в чём отличия кодировки ms dos от кодировки ms windows?

Кодировки (ошибки кодировки) в логировании
Здравствуйте. Работаю с WINAPI и оттуда нормально приходят наименования на русском. Вот решил...

Кодировки
Интересен вопрос с кодировками, хочеть до конца разобраться. Есть несколько вопросов, данные...

Кодировки в си
Здравствуйте. Пишу библиотеку для ардуино. Пытаюсь определить, слово поступило (поступает табличный...

7
348 / 282 / 144
Регистрация: 08.04.2013
Сообщений: 1,230
28.03.2018, 21:44 2
C++
1
Serial.print(a);
0
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
29.03.2018, 10:01  [ТС] 3
тоже выдает что-то совсем не то
0
348 / 282 / 144
Регистрация: 08.04.2013
Сообщений: 1,230
29.03.2018, 10:32 4
У меня в Ардуино все в порядке, проблема наверное у вас в микроконтролере ну и Serial.begin(9600) на мониторе порта тоже надеюсь 9600 выставлен
0
Модератор
Эксперт С++
11069 / 9127 / 5484
Регистрация: 18.12.2011
Сообщений: 24,398
29.03.2018, 10:33 5
Цитата Сообщение от Dkay Посмотреть сообщение
incomingbyte = Serial.read();
Пробуйте заменить на
C++
1
2
const unsigned char shift='а';
incomingbyte = Serial.read()+shift;
0
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
29.03.2018, 10:44  [ТС] 6
Цитата Сообщение от marat_miaki Посмотреть сообщение
мониторе порта тоже надеюсь 9600 выставлен
Да, конечно. Я начинающий программист, но не настолько

Добавлено через 3 минуты
Цитата Сообщение от zss Посмотреть сообщение
incomingbyte = Serial.read()+'а';
Поставил. Вывело -32 для "а". Сейчас попробую incomingbyte заменить с char на unsigned char

Добавлено через 4 минуты
Все заработало. Спасибо вам большое. Не могли бы побольше рассказать про
Цитата Сообщение от zss Посмотреть сообщение
const unsigned char shift='а';
incomingbyte = Serial.read()+shift;
эту конструкцию? А еще, нормально ли то, что один компилятор работает по таблице CP866, а другой (ардуиновский) по таблице CP1251?
И можно ли заставить компилятор ардуино работать по CP866?
0
Модератор
Эксперт С++
11069 / 9127 / 5484
Регистрация: 18.12.2011
Сообщений: 24,398
29.03.2018, 10:50 7
Лучший ответ Сообщение было отмечено Dkay как решение

Решение

У Вас данный читаются без смещения первой буквы в таблице символов.
Поэтому код первой буквы надо прибавить, чтобы получить правильное значение.
Разница в кодировках 1251 и 866 именно в коде первого символа.
Поэтому, все зависит от того, что Вы прибавите.
Если 'a' будет в кодировке 866, то получите все символы в 866.

Отдельный вопрос по букву ё. Она стоит в сторонке от остальных символов.
0
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
29.03.2018, 11:34  [ТС] 8
Спасибо большое еще раз

Добавлено через 12 минут
И все же, я не очень понимаю (извините, туплю), зачем смещать полученные данные на первую букву?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.03.2018, 11:34

Кодировки в С++
Подскажите... Пытаюсь разобраться с кодировками в С++ на простом примере...Как заставить С++...

Кодировки, языки
Здравствуйте. Не могу разобраться с тем как работать с файлами и строками на разных языках....

Ошибка кодировки?
При присваивании русского слова к переменной input типа string - ошибка Но стоит поменять на...

Перевод кодировки
Всем привет! Такая задача Имеем html-код Знаем кодировку (charset) Если кодировка, отличная...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.