Передача unicode строки через com порт в виде ascii строки

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
Встал на лапы
Сообщения: 98
Зарегистрирован: Пн дек 06, 2010 12:26:45

Сообщение ESWANT »

Здравствуйте!

Не могу понять как решить сию проблему:

Программа на Windows CE устройстве передает строку символов через COM порт в контроллер AVR через аппаратный RS232
Так как операционная система CE то я применяю unicode проект (символ кодируется двумя байтами) (используя Visual Studio 8) - тоесть данные отправляю так:

Код: Выделить всё

....
 TCHAR buf[_MAX_LENDTH];
.....
Result=WriteFile(h,buf,KolByte,&KolByte,&Ovr);
например если отправляется строка "ALL" (я для тестирования записываю всё что прийдет в eeprom контроллера)

и вижу 0x41 0x00 0x4c 0x00 0x4c 0x00 тоесть на каждый символ приходит по два байта,

КАК заставить программу отправлять только ascii коды(кирилицу отправлять не нужно будет вообще)
при этом проект чтобы ОСТАЛСЯ unicode? так как CE работает только с unicode
тоесть чтобы в контроллер пришло 0x41 0x4c 0x4c
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

А нельзя тупо перед writefile в цикле скопировать все (i*2-1)-ые символы массива в (i)-ые (i=1..._MAX_LENDTH)? KolByte, соответственно = KolByte / 2.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 736
Зарегистрирован: Пн янв 10, 2011 03:06:36
Откуда: Ростов-на-Дону

Сообщение Goldsmith »

Попробуйте использовать функцию CharToOem. Сейчас у меня нет возможности проверить, но, по-моему, она реализована и в WinCE.
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
Контактная информация:
Встал на лапы
Сообщения: 98
Зарегистрирован: Пн дек 06, 2010 12:26:45

Сообщение ESWANT »

Engineer_Keen писал(а):А нельзя тупо перед writefile в цикле скопировать все (i*2-1)-ые символы массива в (i)-ые (i=1..._MAX_LENDTH)? KolByte, соответственно = KolByte / 2.
попробую, но что интересно KolByte определяет число символов, а не байтов, тоесть KolByte определяется правильно, а в порт на каждый символ передается по два байта
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

т.е при передаче "ALL", kolbyte=3? Что-то сомневаюсь, функция writefile вроде как понимает в 3-м аргументе именно количество байт, а не символов. Вопрос в том, как у вас вычисляется kolbyte.
Реклама
Встал на лапы
Сообщения: 98
Зарегистрирован: Пн дек 06, 2010 12:26:45

Сообщение ESWANT »

Проблема решилась вот так

Код: Выделить всё

.

#define strlen   _tcslen
...
 TCHAR Wbuf[_MAX_LENGTH];
 char buf[_MAX_LENGTH];
......

 KolByte=strlen(Wbuf);

 for(i=0;i<KolByte;i++) buf[i]=(char)Wbuf[i];
  Result=WriteFile(h,buf,KolByte,&KolByte,&Ovr);
......

спасибо всем
Реклама
Ответить

Вернуться в «Интеграция с ПК»