Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить HEX из INT, и отправить в com-порт? 
:(
    Опции темы
quiz
Дата 5.10.2009, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 15.8.2005

Репутация: нет
Всего: нет



Имеется переменная int param=75 (к примеру), необходимо отправить ее в com-порт в hex-виде. То есть, чтобы в порт вывелось "4b".
Если я вывожу напрямую в порт (COM->Write()) значение переменной, то оно кодируется по ASCII и в порт выводится "37 35" :( 

Долго мучаюсь с этой задачей, надеюсь на вашу помощь. Спасибо!
PM MAIL   Вверх
bsa
Дата 5.10.2009, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



Код
std::ostringstream stream;
stream << std::hex << std::setw(2) << std::setfill('0') << param; //минимальная ширина числа 2 символа, недостающие заполняются символом '0'
std::string data = stream.str();
COM->Write(data.c_str(), data.size());


Добавлено через 2 минуты и 18 секунд
Кстати, а что у тебя за класс COM и его метод Write? Какие он параметры принимает? Что в описании написано?
PM   Вверх
quiz
Дата 5.10.2009, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 15.8.2005

Репутация: нет
Всего: нет



Цитата

error C2661: System::IO::Ports::SerialPort::Write: нет перегруженной функции, принимающей 2 аргументов


Пишу COM->Write(data.c_str(), 0, data.size()); и получаю:

Цитата
error C2664: void System::IO::Ports::SerialPort::Write(cli::array<Type,dimension> ^,int,int): невозможно преобразовать параметр 1 из 'const char *' в 'cli::array<Type,dimension> ^'


Добавлено через 3 минуты и 33 секунды
Извиняюсь, забыл написать. Использую Visual C++ (2008)

Write(String)    Записывает указанную строку в последовательный порт.
Write(Byte[], Int32, Int32)    Записывает указанное число байтов в последовательный порт, используя данные из буфера.
Write(Char[], Int32, Int32)    Записывает указанное число символов в последовательный порт, используя данные из буфера.
PM MAIL   Вверх
bsa
Дата 5.10.2009, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



quiz, ты не С++ изучаешь, а .NET.

Это сообщение отредактировал(а) bsa - 5.10.2009, 16:48
PM   Вверх
KelTron
Дата 5.10.2009, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 11
Всего: 38



Для шарпа:
Код

COM.Write(Convert.ToString(param, 16));


Для C++.NET вроде так:
Код

COM->Write(Convert::ToString(param, 16));



--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
quiz
Дата 6.10.2009, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 15.8.2005

Репутация: нет
Всего: нет



Цитата(KelTron @ 5.10.2009,  18:23)
Для C++.NET вроде так:
Код

COM->Write(Convert::ToString(param, 16));

В этом случае, при значении param=75, он выдает в порт "4b" в виде текста. В порт идут ASCII-коды цифры 4 и буквы b, то есть "34 62" 
PM MAIL   Вверх
quiz
Дата 6.10.2009, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 15.8.2005

Репутация: нет
Всего: нет



Решил задачу так
Код
COM->Write(Char(param).ToString());

Для значений от 0 до 127 работает отлично, а после - не хочет :( 

Для значения 140 необходимо отправить 0x8c. Пробую COM->Write("\x8c"); В порт выдается "C2 80"
PM MAIL   Вверх
quiz
Дата 6.10.2009, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 15.8.2005

Репутация: нет
Всего: нет



Окончательно добил подбором нужной кодировки

Код

COM->Encoding = System::Text::Encoding::GetEncoding(28591);

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1031 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.