кирилица в char
- Войдите на сайт для отправки комментариев
Сб, 10/03/2018 - 02:50
Доброго времени суток. Подскажите. Есть, к примеру, такая строка"
char c[] = "abcd"; если пустить в сериал каждый из этих символов, получаем
97 98 99 100 0 95 95 95 95 95 0 0 0 0 0 15 1 -117 2 -111
если заменить английские буквы на русские, то
-48 -80 -48 -79 -48 -78 -48 -77 0 95 95 95 95 95 0 0 0 0 0 15
если и предположить, что -80,-79,-78 и -77 это коды букв, то откуда берется число 48? в английском варианте такого нет.
char c[] = "абвг"; int i = 0; void setup() { Serial.begin(9600); } void loop() { while (i < 20 ) { Serial.println(c[i], DEC); i = i + 1; } Serial.println("_____"); i = 0; }
char совсем кирилицу не поддерживает?
Чтайте про кодировку utf-8 (это кодировка с переменным количеством байтов на символ)
char совсем кирилицу не поддерживает?
Как мне кажется ... я здесь в теме исчерпывающе расписал что и как происходит.
Но администрация форума считает, что может на свой вкус произвольно вытирать любые сообщения в любых количествах.
Благодарите администрацию!
*********************************************************
Администрация, в свою очередь, благодарит Olej за фразу "Для пользователей Linux/UNIX это естественно и понятно ... ну а вЫньдаунов от такого плющит и колбасит.", послужившую причиной удаления поста.
Но администрация форума считает, что может на свой вкус произвольно вытирать любые сообщения в любых количествах.
Вы пять дней на форуме, а начали хамить, холивары разводить, на три буквы людей посылать. Вот Вас самих туда и отправили...
холивары разводить,
Про холивары - это вы ТС-ру расскажите. ;-) Оно ему сильно поможет.
К сожалению я не могу разобраться с этими кодировками, их вроде как очень много различного рода, той же utf8 в интернете тьма и каждая (как понял) для своего языка. Но она что, выбирается или устанавливается автоматически. Ну и желательно, чтобы 1 симпол занимал один байт
А вы у kalapanga поспрашивайте - он думает, что это понимает...
Ничего подобного - UTF8 это способ кодирвания для UNICODE представления символов любого языка, ничего выбирать и устанавливать не надо. Всё абсолютно строго стандартизовано ...
Мало ли что там вам желательно...
Но ведь char занимает 1 байт, разве нет? Если вы мне предлагаете что-то весов в2 байта, то боюсь не подойдёт... А можете подсказать, как узнать вес того или иного массива? Автоматически
Боюсь представить, что здесь будет, когда я доготовлю кушать
char занимает 1 байт. Но char и символ - это не одно и то же.
Любой (в том числе и ASCII) символ в UNICODE выражается 4-байтным значением, которое в способе кодирования UTF-8 представляется переменным числом (1-4) последовательных байт.
И тогда о кодировках, таблицах кодировки, всех этих CP-866, CP-1251, KOI-8r etc. - нужно забыть как страшный сон... всё это уходит в прошлое ... начиная года с 2005-го.
P.S. Всё это есть в стандарте языка C99, 1999 года ... см. стандарт (и POSIX API). В реализациях C где-то есть в полной мере, где-то частично...
.. А можете подсказать, как узнать вес того или иного массива?
Так будет понаглядней:
Я например в своих проектах работаю с кодировкой win1251 - пожалуйста 1 байт.
А уже вывод куда надо - преобразую на ходу
но вроде как везде пишут, что char и byte занимают один байт..а тут получается, что занимает уже как int или long//
насчет длины массива - понятно как вычислить его длину, яимел ввиду, что может есть функция, типа как в php, которая вычисляет прям вес
оу, а подскажите, как использоватьь именно эту кодировку, я потому и спрашивал вначале, только одну ардуино использует кодировку или же подбирает автоматически или может мы сами можем выбрать
Кодировки не "используют", ими пользуются разными в зависимости от задачи, показать что? Преобразование строки из одной в другую? Тупо цикл, тут где то на форуме было, мне с мобильника текст лень писать.
но вроде как везде пишут, что char и byte занимают один байт..а тут получается, что занимает уже как int или long//
И char и byte занимают 1 байт, всё верно, только символ, буква - это уже не эквивалент char. Эквивалентность char и byte тянулась из ... какого-то дремучего 1970 года или ещё раньше. Все новые, современные языки программирования давно от этого отказались: Plan-9, Linux, Python, Go, Swift, Kotlin ... - везде UTF-8.
а помойму изспользовать и пользовать это одно и то же. Как мне использовать именно win1251
Какая вам разница что там вам предлагает стандарт? Стандарт предлагает, а вы - пользуйтесь.
У вас Far есть? Посмотрите им .ino-файл скетча, где есть русские буквы, обратите в какой кодовой странице он сохранен, переключитесь на ANSI...
Принудительно вы можете в массиве задать ascii-коды, например так: char c[] = "\x80\x81\x82\x83";
а, ну я понял, я б тое отказался, будь у меня оперативка 16 гб, а не 1 кб, а память исчислялась терабайтами) но ведь возможность использовать менее "емкие" кодировки все таки есть
а помойму изспользовать и пользовать это одно и то же. Как мне использовать именно win1251
Не знаю)
Наводящий вопрос : а что сделать то? Вывести в монитор порта или в СМС отправить или что?
Вот например использование, начиная с 341 строки древний код
http://arduino.ru/forum/proekty/arduino-bluetooth-klaviatura-s-shifrovan...
far это файловый менеджер? в поиске он выходит первым
а вот насчет принудительного задавания это еще интереснее. Мне было бы удобнее самому попорядку задать каждой букве свой код(мне нужны то только все буквы и основные знаки препинания
я правильно вас, понял, букве а я могу задать код, например 1, и в дальнейшем у буквы а код будет всегда 1?
Мне было бы удобнее самому попорядку задать каждой букве свой код
Какой ужас!!!
far это файловый менеджер? в поиске он выходит первым
а вот насчет принудительного задавания это еще интереснее. Мне было бы удобнее самому попорядку задать каждой букве свой код(мне нужны то только все буквы и основные знаки препинания
я правильно вас, понял, букве а я могу задать код, например 1, и в дальнейшем у буквы а код будет всегда 1?
Тяжёлый случай (
Вы уверены что попали на нужный форум?
С программированием как вообще?
Каждое устройство отображает символ в зависимости от кода так как это задумали его создатели, а уж преобразовать из одного кода в другой ваша забота.
Задайте в поиске - таблица соответствия unicode win1251 utf8 - может быть тогда наглядно все понятно вам будет
far это файловый менеджер? в поиске он выходит первым
а вот насчет принудительного задавания это еще интереснее. Мне было бы удобнее самому попорядку задать каждой букве свой код(мне нужны то только все буквы и основные знаки препинания
я правильно вас, понял, букве а я могу задать код, например 1, и в дальнейшем у буквы а код будет всегда 1?
Far - это файловый менеджер, да. У него мощный редактор/просмотрщик.
Не понимаю, что такое "задать букве код". Вы можете в строку поместить байты с определенными значениями (0..255) и потом засылать их в некоторое устройство. Как устройство их будет интерпретировать - вопрос второй.
а помойму изспользовать и пользовать это одно и то же. Как мне использовать именно win1251
Мне было бы удобнее самому попорядку задать каждой букве свой код
Какой ужас!!!
far это файловый менеджер? в поиске он выходит первым
а вот насчет принудительного задавания это еще интереснее. Мне было бы удобнее самому попорядку задать каждой букве свой код(мне нужны то только все буквы и основные знаки препинания
я правильно вас, понял, букве а я могу задать код, например 1, и в дальнейшем у буквы а код будет всегда 1?
а помойму изспользовать и пользовать это одно и то же. Как мне использовать именно win1251
Получить адекватные коды Где??? Из чего??? Озвучте конкретное требование. ЗЫ : не надо с моим кодом сидеть - плохой пример, сейчас бы я все по другому написал.
качаемс, посмотримс, ну а вообще, я так и хотел делать, на крайний случай, ведь запросто каждую букву можно обозвать числом и она спокойно влезет в 1 байт, разве что меня такой вопрос интересует. Что будет более емким char c[] = "эюя"; или byte c[] = '31','32','33';
качаемс, посмотримс, ну а вообще, я так и хотел делать, на крайний случай, ведь запросто каждую букву можно обозвать числом и она спокойно влезет в 1 байт, разве что меня такой вопрос интересует. Что будет более емким char c[] = "эюя"; или byte c[] = '31','32','33';
А второй вариант однобайтовый куда собираетесь выводить? Хранить компактно это только пол дела
а помойму изспользовать и пользовать это одно и то же. Как мне использовать именно win1251
мне нужно перебирать текст, не более, выводить буквы, каждой букве будет назначено отдельное действие
второй вариант сложнее для восприятия, но можно написать програмулину, которая будет переводить обычный текс в это добро, встаили в ардуино,а дальше пусть сама
по емкости они оба занимают 3 байта?
я как понимаю варианты с заменой одной кодировки на другую требуют постоянного пребора, того же for или while для каждого символа?
я как понимаю варианты с заменой одной кодировки на другую требуют постоянного пребора, того же for или while для каждого символа?
Нет, я давал ссылку, никакого перебора, тупо математика, в конце концов - вы табличку в интернете соответствия кодировок посмотрели - совсем ведь просто
не удите, таблицу я видел. Но ведь у вас в коед постоянно используется ф-я RusKeyTo1251
И? Но не цикл же по всей кодовой таблице.
ведь запросто каждую букву можно обозвать числом и она спокойно влезет в 1 байт
Кто Вам сказал эту глупость?
Попытайтесь запихнуть 54600 китайских иероглифов в 1 байт.
А для англосакса, что иероглифы, что кириллица - без разницы.
Собсвенно, исчерпывающий ответ для человепка, который умеет пользоваться поиском, я привел в ответе №1.
Но раз Вы поиском пользоваться не умеете, начните с этого: https://ru.wikipedia.org/wiki/UTF-8
Если будет непонятно... и после второго-третьего прочтения непонятно, походите по ссылкам: https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8
Я так то писал, что нужен мне только русскиц
AVS, Вы уж определитесь, Вам нужно "каждую букву" или только кириллическую, Вам нужна своя собственная ни с чем не совместимая кодировка, или Вы хотите пользоваться какой-либо стандартной (например, utf-8).
Но я ведь вроде писал, что мне нужны только русские и пара знаков, все в общем то) прошу прощения если выразился не так.
А на второй вопрос?
Главный вопрос так и не задали: А куда это нужно выводить? В смысле это экран, COM-порт, СМС, Web-сервер, блютус?
Это все очень разные темы, совсем разные. Некоторые экраны вообще не знают русского (к счастью), те, которые знают, имеют кучу разных шрифтов в разных кодировках.
И смежный вопрос - откура вводить эту абракадабру, сорри, кириллицу? В коде при программировании? Или при работе с какойц-то клавы? Или придет по СМС? Или по сети? Это тоже все совершенно разные вещи.
--------------------
Лучший выход - в жопу кириллицу (это проще), или учиться, учиться и еще раз учиться. Если хотим помощи, то точно описать свои задумки и хотелки, тебе подберут самый оптимальный вариант решения.