ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
22 июля
1042408 Топик полностью
Chip_n_Go (06.10.2020 14:12, просмотров: 19) ответил Aleksey_75 на когда 2 литра мало , а 4 много ))) как "замутить" переменную на 3 байта ? )))
На 8-битниках работает нормально, на Cortex не проверялось, но из-за невыровненного доступа возможны нюансы. 
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
#ifndef __UINT_24_T
#define __UINT_24_T
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
struct uint24_t
{
protected:
 unsigned char Byte[3];                                 // Битовый образ числа

public:
 inline uint24_t();                                     // Конструкторы
 inline uint24_t(const unsigned long);

 inline operator unsigned long();                       // Операторы преобразования    
 inline uint24_t& operator =(const unsigned long);

};
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
uint24_t::uint24_t()
{
};
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
uint24_t::uint24_t(const unsigned long Value)
{
 Byte[0] = (Value >>  0L) & 0xFF;
 Byte[1] = (Value >>  8L) & 0xFF;
 Byte[2] = (Value >> 16L) & 0xFF;
};
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
uint24_t::operator unsigned long()
{
 return (((unsigned long)Byte[2] << 16L) |
        ((unsigned long)Byte[1] <<  8L) | Byte[0]);
};
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
uint24_t& uint24_t::operator =(const unsigned long Value)
{
 Byte[0] = (Value >>  0L) & 0xFF;
 Byte[1] = (Value >>  8L) & 0xFF;
 Byte[2] = (Value >> 16L) & 0xFF;

 return *this;
};
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
#endif
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------