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

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

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

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

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

но проблема в том, что не могу передать переменную string в функцию вот сама тема с кодом. если у кого есть варианты буду ждать
Не могу добавить переменную String в функцию
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.01.2016, 04:27
Ответы с готовыми решениями:

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

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

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

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

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

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

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

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

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

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

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



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

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


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  [ТС]
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
 Аватар для Витальич
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
06.01.2016, 10:01
Цитата Сообщение от Efim25 Посмотреть сообщение
компилятор дает ошибку
текст ошибки напишите
0
0 / 0 / 0
Регистрация: 22.12.2015
Сообщений: 47
06.01.2016, 10:04  [ТС]
Витальич, пожалуйста
warning: address of local variable 'dlina' returned [-Wreturn-local-addr]

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

и массив символов string кстати тоже не получилось передать функции
0
 Аватар для Витальич
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
06.01.2016, 10:25
пост №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  [ТС]
Витальич, в этом посте функция ни чего не возвращает, а мне нужно символьный массив char[]
0
 Аватар для Витальич
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
06.01.2016, 10:47
Цитата Сообщение от 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  [ТС]
Витальич, я как раз книгу читаю тут на форуме посоветовали Прата автор, но как я понял что в скобках это то, что мы передаем в функцию, а тип результата void, т.е. его нет, а char* dst это второй параметр который передаем в функцию, причем если я все правильно понимаю то переменная char* dst видна только внутри массива void russtring_2b_2_1b
0
 Аватар для Витальич
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
06.01.2016, 11:10
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  [ТС]
все понял спасибо (видать до этого не дошел, т.к. больше 1к страниц), но принцип понятен
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
06.01.2016, 11:19
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.01.2016, 11:19
Помогаю со студенческими работами здесь

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

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

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

Английские использует как сделать еще использование русских?
Английские использует как сделать еще использование русских? var i,j,dL,g,k,dL1:integer;i1:char; kL_sL,res,txt:string; ...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru