Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 25

Кодировка символов для порта

08.06.2017, 14:01. Показов 3626. Ответов 13

Студворк — интернет-сервис помощи студентам
Здравствуйте.
У меня задача - передать по COM-порту данные в двоичном коде. Я разобрался как передавать по нему данные но в кодировке ANSII, т.е. число возможных кодов 7F, по материалам http://www.kernelchip.ru/pcports.php и скачанной от туда библиотекой. Как я понял действо там происходит через стандартный дескриптор и порт представлен как файл. Проблема такова что некотоыре байты нужно передавать.. превышая ограничения ANSII, например FF, или A2 (числа к примеру).
Потому вопрос - можно ли как то .. программно присвоить определенному символу двухбитный код который бы соответствовал, например FF?
Или нужно как то изменить кодировку вообще, на UTF8 и т.п? Но как я понял это повлечет то что каждый символ будет занимать по 2 байта?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.06.2017, 14:01
Ответы с готовыми решениями:

Кодировка для символов
Здравствуйте! Столкнулся с такой проблемой что при записи в БД получаю ошибку кодировки: 'latin-1' codec can't encode character '\u0142' in...

Кодировка русских символов для html
Суть проблемы: необходимо сгенерировать отчет в файл html. Отчет генерируется, но возникли проблемы с кодировкой для русского текста,...

Кодировка в делфи и мускуле, для отображения русских символов
Использую MySQL 5.5.27 и делфи ХЕ5 с компонентом UniDac. В самой программе русские символы выводиться корректно, а вот в ПШПМУАДМИН и...

13
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
08.06.2017, 14:08
nzt, COM-порт может передавать любые байты без изменений. Если конечно в той библиотеке не намудрено что-то с преобразованием конца строки или ещё чего-нибудь.
0
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 25
08.06.2017, 14:10  [ТС]
Сейчас сообразил что мало будет посылать данные в нужной кодировке - их так же нужно и принимать распознавая. Банальный тест с отправкой на компорт символа 'ы' показал что приходит с компорта уже иной символ 'k'. Значит нужно менять кодировку приложения?
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
08.06.2017, 14:13
Цитата Сообщение от nzt Посмотреть сообщение
на UTF8 и т.п? Но как я понял это повлечет то что каждый символ будет занимать по 2 байта?
У UTF-8 на один символ может приходиться от 1 до 6 байтов. Смотри внимательно - https://ru.wikipedia.org/wiki/UTF-8.
0
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 25
08.06.2017, 14:29  [ТС]
Сейчас ищу код- пример.
По теме UTF8 - ДА, от 1 до 6, но когда 1 байт - менять можно только 7 битов, так же как в ANSII, а ежели делать 2 байта - то я все равно не могу контролировать все 8 разом. Верно?

Добавлено через 11 минут
Ну вот пример : (Ранее мой код, но потом от него ушел)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) 
{
 LPCTSTR sPortName = L"\\\\.\\COM1";
 HANDLE com;
 char text[] = "hi-hiii :3 ";
 DWORD dwSize = sizeof(text);
    DWORD Bytes;
 com=CreateFile(sPortName , GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
 bool letter=WriteFile(com, text , dwSize, &Bytes, NULL);
 if(com)
 {
  MessageBox(NULL, L"Успешно", L"COM1", MB_OK);
 }
 else
 {
  MessageBox(NULL, L"Ошибка", L"COM1", MB_OK);
 }
 return 0; 
}
Я не вижу в нем возможности менять кодировку.
0
2393 / 1913 / 763
Регистрация: 27.07.2012
Сообщений: 5,559
08.06.2017, 14:39
Передавай не массив char, а массив unsigned char.
C++
1
bool letter=WriteFile(com, (unsigned char*)text , dwSize, &Bytes, NULL);
0
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 25
08.06.2017, 15:19  [ТС]
John Prick, Уважаемый, несмотря на то что этот код я скорее всего уже не использую, можете пояснить, что даст ваш вариант?
Я пришел к мысли что можно попробовать производить побитовый сдвиг и грубо говоря загонять данные в нужный разряд.. Однако сообразил что это может вылиться в еще большую мороку.. Идеально было бы.. Производить ввод числа сразу как шеснадцатеричный код, и пихать его в ком порт. Т.е. число 99 - переводить в код 10011001, и отправлять. Кто нибудь в курсе как такое сделать?
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
08.06.2017, 15:31
nzt, чтобы из символа '9' который у вас в строке, сделать число 9, нужно из символа вычесть символ '0'. Это будет справедливо для практически всех кодировок (ну за исключением таких, у которых бы числа шли не по порядку или в обратном порядке , хотя таких ни разу не встречал). Чтобы из 'F' сделать 15, тоже нужно вычесть '0', и это тоже для подавляющего числа кодировок верно (внимание, верхний регистр! В случае сомнений в кодировке или для нижнего нужно делать 'f'-'a'+10).
0
2393 / 1913 / 763
Регистрация: 27.07.2012
Сообщений: 5,559
08.06.2017, 15:35
nzt, ком-порт оперирует байтами, а не символами. Ему совершенно всё равно, что там именно закодировано и каким количеством байт. unsigned char здесь аналог байта просто. Представляем наш массив данных как массив байтов (для этого и используется приведение типа) и отправляем. На принимающей стороне делаем обратное приведение, или какое-то другое преобразование, если надо.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
08.06.2017, 15:47
Цитата Сообщение от nzt Посмотреть сообщение
Банальный тест с отправкой на компорт символа 'ы' показал что приходит с компорта уже иной символ 'k'
Кодировка тут скорее всего виндовская - https://ru.wikipedia.org/wiki/Windows-1251 , и если 'ы' (0xFB) превратился в 'k' (0x6B), значит 2 бита куда-то делись. Смотреть отладчиком надо, на каком этапе (до получения либо после расшифровки).
0
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 25
08.06.2017, 16:28  [ТС]
John Prick, не могли бы вы подтолкнуть в тему где можно глянуть на код программы которая пересылает в компорт любые данные, а не исключительно строки или магию типа LPSTR(не помню точно название).
Пока у меня появилась мысль строку введенных числе дополнить '0x' и посмотреть - получится ли 16-й код.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
08.06.2017, 16:35
nzt, вместо
C++
1
char text[] = "hi-hiii :3 ";
наберите
C++
1
char text[] = {0x34, 0x67, 0x123, 0x38, 0x8A, 0xFE, 0xAA};
0
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 25
08.06.2017, 17:15  [ТС]
TRam_, Блин.. Вы совершенно правы. Черт. Большущее спасибо. Теперь осталось понять.. как в такой вид переводить данные типа char. Я сумел вывести только char*.. Т.е. вводишь 123, а выходит "Ох123" .. но это массив а не шеснадцатиричное число..
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
08.06.2017, 18:03
http://www.c-cpp.ru/content/scanf, http://www.c-cpp.ru/content/printf и http://www.c-cpp.ru/content/sprintf
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.06.2017, 18:03
Помогаю со студенческими работами здесь

Считывание из порта двух символов заместо одного
Добрый день, господа :) Пишу программу, которая может одновременно связываться с несколькими COM(RS-232) портами, в ней использую...

Кодировка символов
здравствуйте, столкнулся с проблемой кодировки, вообщем при использовании System.Out.println(""), если ввести русские символы,...

Кодировка символов в С++
получил кода русских символов через такую небольшую прогу: char ch, ch1; int in, in1; ch = 'я'; ch1 = 'А'; in = ch; in1 =...

Кодировка символов
Нужна помощь в такой вот задаче. Пишу парсер для rtf файлов. Загвоздка в том что латинский текст в файле храниться как есть, а вот русский...

кодировка символов
Всем привет! Столкнулся с такой проблемкой: есть поле unsigned char в него я и ввожу параметр значения, однако необходимо чтобы...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru