Форум программистов, компьютерный форум, киберфорум
Arduino
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 22.12.2015
Сообщений: 47
1

Транслятор русских букв в английские

05.01.2016, 04:27. Просмотров 5105. Ответов 31
Метки нет (Все метки)


Здравствуйте.
в общем хочу сделать что бы русские буквы воводились на дешевых 1602 подобных ЛСД дисплеях
но проблема в том, что он понимает только байтовые символы, а русские буквы кодируются 2-мя байтами

смысл хочу русские буквы передать переменной string там преобрзовать и опять отдать обратно в отдобайтовом виде char

но проблема в том, что не могу передать переменную string в функцию вот сама тема с кодом. если у кого есть варианты буду ждать
Не могу добавить переменную String в функцию
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.01.2016, 04:27
Ответы с готовыми решениями:

Из русских букв в английские
написал код,который если написать руддщ запишет как Hello я хочу каким то невероятным образом...

Функция по переводу в переменной русских букв в английские
Есть переменная в которой могут быть буквы и цифры, нужно проверить ее на предмет наличия русских...

Изменение имя учетной записи (с русских букв на английские)
Добрый вечер. Извиняюсь заранее, если повторяюсь темой. Но так и не смог найти вразумительного...

Корректное считывание строк из файла вне зависимости от кодировки и замена в них русских букв на английские
Доброго времени суток ! Делаю программу, которая анализирует содержимое текстовых файлов. Это...

__________________
Помогаю в написании студенческих работ здесь.
31
954 / 583 / 97
Регистрация: 15.05.2012
Сообщений: 3,426
05.01.2016, 07:29 2
С финты ли 2-мя? Посмотрите в конец таблицы ASCII. Хотя, конечно, может быть это ваша программа оперирует какой-то своей кодировкой. Может стоит тогда перейти на то, чем пользуются все?
1
0 / 0 / 0
Регистрация: 22.12.2015
Сообщений: 47
05.01.2016, 10:55  [ТС] 3
pyzhman, все символы до 127 записываются одним байтом, все что выше двумя (это в части микроконтроллеров АВР)

если вы не согласны жду конкретный код
0
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,177
05.01.2016, 14:00 4
Зависит от конкретного дисплэя. Таблицы символов у них жестко вшиты, а потому работает он строго в своей кодировке. Надо либо искать таблицу кодов под вашего дисплея, попробовать прогнать на дисплее все коды от 0 до 255, чтобы посмотреть, какие он реально умеет выводить.

Кроме того, обычно эти экранчики умеют выводить некоторое количество пользовательских символов. То есть, если вам нужно не слишком много русских букв, вы можете их просто ручками нарисовать.

но проблема в том, что он понимает только байтовые символы, а русские буквы кодируются 2-мя байтами
Возможно, я немного неправильно понимаю суть проблемы, но, если всё-таки правильно, по сути вопрос не в контроллерах. Тут проблема, в кодировке, используемой вашим текстовым редактором. Если вы установите своему текстовому редактору однобайтную кирилическую кодировку, допустим, KOI-8R, то русские символы начнут трактоваться одним байтом. Хотя, это вовсе не означает, что дисплей их поймёт.

С русскими символами всегда так. Каждый реализует их во что горазд. Но, опять же, убедитесь сперва, что ваш дисплей знает кирилицу.
0
0 / 0 / 0
Регистрация: 22.12.2015
Сообщений: 47
05.01.2016, 14:10  [ТС] 5
Mirmik, дисплей их не знает вообще, если бы знал проблем бы не было

компилятор все понимает в ASCII и это начало UTF-8 где первые 127 символов кодируются одним байтом, дальше двумя

тогда другой вопрос не могу передать unsigned char функции, компилятор ругается, что посоветуете???
0
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,177
05.01.2016, 14:15 6
Хм... Так что вы пытаетесь сделать, если у вас дисплей не понимает кирилицу. Я не совсем улавливаю суть замысла....
0
0 / 0 / 0
Регистрация: 22.12.2015
Сообщений: 47
05.01.2016, 14:37  [ТС] 7
Mirmik, ну к примеру русскую букву А можно заменить английской. а так символов которых нет можно дорисовать

основная масса LSD 1602 и на HD44780-совместимых имеют английский и китайский, а с кирилицей дифицит и стоят в 3-5 раза дороже



Добавлено через 4 минуты
http://asis-kbr.ru/forum/viewtopic.php?p=168

вот интересная тема попробую сделать по ее принципу
0
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,177
05.01.2016, 14:58 8
Я тоже так делал, как написано в этой теме. Возможно, это лучший вариант. У меня где-то даже библиотека символов осталась.
Но, если вы всё-таки хотите обучить контроллер транслиту, это можно сделать так:


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
void russtring_2b_2_1b(const wchar_t* src, char* dst, int len)
{
  for (;len != 0;len--){
    switch(*src++)
      {
          case L'А': *dst++ = 'A';break;
          case L'Б': *dst++ = 'G';break;
          case L'В': *dst++ = 'B';break;
          case L'Г': *dst++ = 'T';break;
          case L'Д': *dst++ = 'D';break;
          case L'Е': *dst++ = 'E';break;
          case L'Ё': *dst++ = 'E';break;
          case L'Ж': *dst++ = 'M';break;
          case L'З': *dst++ = 0x09;break; //You can use code instead symbol
          case L'И': *dst++ = 'I';break;
          case L'Й': *dst++ = 'I';break;
          case L'К': *dst++ = 'K';break;
          case L'О': *dst++ = 'O';break;
          case L'Ы': *dst++ = 'U';break;
          case L'Р': *dst++ = 'R';break;
          case L' ': *dst++ = ' ';break;
          case L'Н': *dst++ = 'N';break;
          case L'Ь': *dst++ = 'b';break;
          default: *dst++ = '}'; break;   //Symbol not defined
      };
   
};
*dst = '\0';     //nullterm string
};
 
void setup(){
Serial.begin(9600);
char str[16];
russtring_2b_2_1b(L"АБВГАЕЁЖЗ", str, 9);
Serial.print(str);
russtring_2b_2_1b(L"ДОБРЫЙ ДЕНЬ", str, 11);
Serial.print(str);
}
 
void loop(){}
1
0 / 0 / 0
Регистрация: 22.12.2015
Сообщений: 47
06.01.2016, 04:08  [ТС] 9
Mirmik, я хочу сделать немного другое
если вы напишете АБВГАЕЁЖЗ, то и на экране будет тоже самое

Добавлено через 12 часов 59 минут
еще вопрос, в такой вариации все работает, а вот если char dlina = 'A'; заменю на char dlina[10] = "Hello World!"'; то компилятор дает ошибку
C++ (Qt)
1
2
3
4
5
6
7
char rusline (char ruline)
    {
 
    char dlina = 'A';
    return dlina; //коментируем т.к. вывод будет символьный
 
    }
0
1279 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,884
06.01.2016, 10:01 10
Цитата Сообщение от Efim25 Посмотреть сообщение
компилятор дает ошибку
текст ошибки напишите
0
0 / 0 / 0
Регистрация: 22.12.2015
Сообщений: 47
06.01.2016, 10:04  [ТС] 11
Витальич, пожалуйста
warning: address of local variable 'dlina' returned [-Wreturn-local-addr]

char dlina[] = "Hello,World! ";
0
1279 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,884
06.01.2016, 10:13 12
return dlina;
не может вернуть массив
Можно вернуть указатель на массив, но это переделка всего кода.
0
0 / 0 / 0
Регистрация: 22.12.2015
Сообщений: 47
06.01.2016, 10:19  [ТС] 13
Витальич,
подскажите как правильно, а то я могу передать функции массив char[], а вот вернуть не могу, ни char ни string

и массив символов string кстати тоже не получилось передать функции
0
1279 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,884
06.01.2016, 10:25 14
пост №8 функция void russtring_2b_2_1b(const wchar_t* src, char* dst, int len)
0
0 / 0 / 0
Регистрация: 22.12.2015
Сообщений: 47
06.01.2016, 10:32  [ТС] 15
Витальич, в этом посте функция ни чего не возвращает, а мне нужно символьный массив char[]
0
1279 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,884
06.01.2016, 10:47 16
Цитата Сообщение от Efim25 Посмотреть сообщение
в этом посте функция ни чего не возвращает,
Цитата Сообщение от Mirmik Посмотреть сообщение
void russtring_2b_2_1b(const wchar_t* src, char* dst, int len)
char* dst - а это что? Это возвращаемое значение.
Давайте так, изучите азы СИ, углубленно не надо, но что как пишется (нотация) и как что работает.
0
0 / 0 / 0
Регистрация: 22.12.2015
Сообщений: 47
06.01.2016, 10:52  [ТС] 17
Витальич, я как раз книгу читаю тут на форуме посоветовали Прата автор, но как я понял что в скобках это то, что мы передаем в функцию, а тип результата void, т.е. его нет, а char* dst это второй параметр который передаем в функцию, причем если я все правильно понимаю то переменная char* dst видна только внутри массива void russtring_2b_2_1b
0
1279 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,884
06.01.2016, 11:10 18
C
1
void russtring_2b_2_1b(const wchar_t* src, char* dst, int len)
wchar_t* src и char* dst Указатель на переменную src и указатель на переменную dst, передаётся не значение, а адрес в памяти где хранится эта переменная, поэтому функция не делает копию значения, а работает с той переменной указатель которой передали. Другими словами это можно назвать возвращаемым значением.
Массив: char arr[10]; К нему можно обращаться через индекс arr[0] - первое значение, arr[1] второе значение, а можно обращаться через указатель *arr - первое значение *(arr + 1) - второе значение. * - в данном контексте означает разименования значения, другими словами получения доступа к значению
.
1
0 / 0 / 0
Регистрация: 22.12.2015
Сообщений: 47
06.01.2016, 11:14  [ТС] 19
все понял спасибо (видать до этого не дошел, т.к. больше 1к страниц), но принцип понятен
0
Модератор
Эксперт по электронике
8364 / 6210 / 834
Регистрация: 14.02.2011
Сообщений: 21,573
06.01.2016, 11:19 20
Цитата Сообщение от Efim25 Посмотреть сообщение
еще вопрос, в такой вариации все работает, а вот если char dlina = 'A'; заменю на char dlina[10] = "Hello World!"'; то компилятор дает ошибку
а если а вот так
C
1
2
3
4
5
6
7
8
char rusline (char ruline)
    {
 
    char dlina[10];
   dlina[0]='A';
    return dlina[0]; //коментируем т.к. вывод будет символьный
 
    }
Добавлено через 3 минуты
Цитата Сообщение от Efim25 Посмотреть сообщение
warning: address of local variable 'dlina' returned [-Wreturn-local-addr]
char dlina[] = "Hello,World! ";
можно вот так, если строка не будет менятся
C
1
2
3
4
5
char* rusline (char ruline)
    {
static  char dlina[] = "Hello,World! ";
    return dlina; 
    }
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.01.2016, 11:19

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Дана строка, содержащая текст, включающий русские и английские слова. Подсчитать, каких букв в тексте больше - русских и
Дана строка, содержащая текст, включающий русские и английские слова. Подсчитать, каких букв в...

Замена русских символов на английские
Как сделать так чтобы при записи в файл русские символы заменяются на английские и наоборот?

Английские использует как сделать еще использование русских?
Английские использует как сделать еще использование русских? var...

Замена букв на английские
Привет всем! Помогите плз с решением одной задачи. Нужно как то сделать так, чтобы при вводе какого...

Дан текст из строчных русских букв. Подсчитать количество гласных букв в тексте
Дан текст из строчных русских букв. Подсчитать количество гласных букв в тексте.

Перевод русских букв на латиницу и подсчёт количества букв
Написал программу в паскале, которая переводит при вводе имени русские буквы на латиницу и считает...


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

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

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