35 lines
1.5 KiB
C
35 lines
1.5 KiB
C
#pragma once
|
|
|
|
|
|
#define unpack_u8( ptr ) ( ((uint8_t*)(ptr))[0] )
|
|
#define unpack_u16( ptr ) (\
|
|
( ((uint8_t*)(ptr))[1] << 8 ) |\
|
|
( ((uint8_t*)(ptr))[0] ) )
|
|
#define unpack_u32( ptr ) (\
|
|
( ((uint8_t*)ptr)[3] << 24 ) |\
|
|
( ((uint8_t*)ptr)[2] << 16 ) |\
|
|
( ((uint8_t*)ptr)[1] << 8 ) |\
|
|
( ((uint8_t*)ptr)[0] ) )
|
|
|
|
#define unpack_float( ptr ) *(float*)(uint32_t[]){ unpack_u32( ptr ) }
|
|
|
|
#define pack_u8( ptr, data ) ( ((uint8_t*)(ptr))[0] = ( data ) )
|
|
#define pack_u16( ptr, data ) do{ \
|
|
((uint8_t*)(ptr))[0] = (data)&0xFF;\
|
|
((uint8_t*)(ptr))[1] = ((data)>>8)&0xFF;\
|
|
}while(0)
|
|
|
|
#define pack_u24( ptr, data ) do{ \
|
|
(uint8_t*)(ptr)[0] = (data)& 0xFF; \
|
|
(uint8_t*)(ptr)[1] = ( ( data ) >> 8 ) & 0xFF; \
|
|
(uint8_t*)(ptr)[2] = ( ( data ) >> 16 ) & 0xFF; \
|
|
}while( 0 )
|
|
|
|
#define pack_u32( _xptr, _xdata ) do{ \
|
|
((uint8_t*)(_xptr))[0] = (_xdata)&0xFF;\
|
|
((uint8_t*)(_xptr))[1] = ((_xdata)>>8)&0xFF;\
|
|
((uint8_t*)(_xptr))[2] = ((_xdata)>>16)&0xFF;\
|
|
((uint8_t*)(_xptr))[3] = ((_xdata)>>24)&0xFF;\
|
|
}while(0)
|
|
|