Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2014, 20:26   #1
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию Int to int

Добрый вечер. Вопрос такой. Есть некоторое значение, которое передается по COM порту. Это знаковое двубайтовое число(int16_t). Дело в том, что я принимаю всю информацию по одному байту т.е. массивом, предположим buf.

Теперь практика. Я отправляю слово со значением 123123(DEC) Принимаю соответственно два байта. Один равен buf[0]=224, другой buf[1]=243 в десятичной системе счисления. Как из этих двух байт собрать int?

Приложение к вопросу
Отправка данных
Код:
int buf = 123123;
byte * bf = (byte *) &buf;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  Serial.write(bf[0]);
  Serial.write(bf[1]);
  delay(500);
}
Прием данных(C++)
Код:
if (read(fd,buf,2)!=0)
    {
        printf("%u %u \n",buf[0],buf[1]);
       // int t = (signed short int) buf[0];Так уже пробовал
       // printf("%i\n",(int)t);
    }

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 20.05.2014, 20:36   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

224 = $E0
243 = $F3
123123 = $1E0F3 - как оно в слово может уместиться?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.05.2014, 20:59   #3
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

А ларчик просто открывался. Спасибо огромное. Если бы Вы знали сколько я способов перепробовал...
--
Итого
Код:
if (read(fd,buf,2)!=0)
    {
        short int * t = (short int *) &buf[0];
        printf("%i\n",*t);
    }

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог

Последний раз редактировалось _PROGRAMM_; 20.05.2014 в 21:14.
_PROGRAMM_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
error C2664: itoa: невозможно преобразовать параметр 1 из 'int *' в 'int' + запись в файл niixon Общие вопросы C/C++ 4 14.09.2013 23:35
Как обратиться к элементу, если разные типы данных (int* и int) Fanyuus Общие вопросы C/C++ 4 03.06.2013 23:47
Двухзначное число int записать как пару однозначных int (c++) narien Помощь студентам 2 08.01.2012 15:10
функция float average(int arrray[],int from,int to) yuliyayuliya Помощь студентам 0 25.04.2011 21:55
С++:invalid types 'int[int]' for array subscript greendoom Помощь студентам 0 19.03.2011 16:53