С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Union - Объединения - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Погрешность вычисления(ряд Тейлора) http://www.cyberforum.ru/cpp-beginners/thread655686.html
написал программку вычисления функции exp(x) разложением в ряд Тейлора с заданной точностью. Программа должна суммировать члены ряда до тех пор, пока модуль очередного члена ряда не станет меньше...
C++ Написать конвертер, переводящий л.с. в ньютон на метр переводящий л.с в ньютон на метр http://www.cyberforum.ru/cpp-beginners/thread655679.html
Сортировка методом центрированных вставок C++
Доброго времени суток. Помоги доделать программу. Я решил сделать эту сортировку через массивы(возможно зря)). И теперь, допусти если у нас элемент их исходного массива imas больше чем последний из...
C++ Масштабирование числовой прямой
Незнаю куда запостить такой вопрос, поэтому в случае чего перенесите Имеется шкала(допустим от 0 до 88) как ее перевести в другую (допустим от нуля до 12) и как перевести шкалу от n до m к...
C++ Верно ли,что все элементы массива B входят в массив A http://www.cyberforum.ru/cpp-beginners/thread655628.html
Даны два одномерных массива A(n) и B(m).Верно ли,что все элементы массива B входят в массив A?
C++ не могу понять что с выводом помогите найти косяк,у меня при отрицательном "a" он выдаёт результат и "error" хотя должен только "error" таже проблема если b=0 a>0 #include <stdafx.h> #include <iostream> using namespace... подробнее

Показать сообщение отдельно
ValeryS
Модератор
6729 / 5138 / 485
Регистрация: 14.02.2011
Сообщений: 17,254
21.09.2012, 21:54
Infinity3000,
посмотрел я на твою ссылку и пригорюнился
одна эта фраза
Как вы узнаете, объединения очень похожи на структуры,


Elfenlide,
попытаюсь объяснить своими словами
Объединения используют когда одни и те же данные нужно выразить разным способом
например(куски реальной программы для работы с контроллера с USB)
хост посылает контроллеру данные упакованные вот в такую структуру
C++
1
2
3
4
5
6
7
typedef struct{ 
  byte bmRequestType;//0
  byte bRequest;     //1
  word wValue;       //2-3
  word wIndex;       //4-5
  word wLength;      //6-7
} SETUP_PACKET;
иногда нужно значение первых 2 элементов вместе
их удобно объединить
C++
1
word         wRequest;
но хост посылает последовательно 8 байт и как их вписать в слово word wValue;?
и тут приходит на помощь объединение

C++
1
2
3
4
5
6
typedef union
{
  SETUP_PACKET setup;
  byte         b[8];
  word         wRequest;
} UsbSetupPacket;
т.е одни и те же данные можно представить
массив из 8 байтов
структуру SETUP_PACKET
и слово wRequest(используются два первых байта)

и работаем
C++
1
UsbSetupPacket SetupPacket;
при получении данных нам удобней работать с массивом
C++
1
2
  for (i=0; i<8; i++)
   SetupPacket.b[i]= Usb_read_byte();
при анализе пакета с wRequest;
C++
1
2
3
  switch (SetupPacket.wRequest)  
  {
    case GET_STATUS_DEVICE:
а для обработки со структурой

C++
1
2
3
 if (SetupPacket.setup.wValue ==0x00  )     //  FEATURE_ENDPOINT_HALT
      {
       wIndex = (SetupPacket.setup.wIndex & 0x7F );
так же можешь разложить int на массив char
C++
1
2
3
4
5
union
  {
   ArrChar char[4];
   Value int; 
  }
в зависимости от элемента будешь работать или с массивом байт или с числом
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.