10#ifndef CORE_GP_GET_SET_BYTES_H
11#define CORE_GP_GET_SET_BYTES_H
20#define GP_SWAP_BYTES2(v) ( \
21 (((v) & 0xff00)>>8) | \
30#define GP_SWAP_BYTES3(v) ( \
32 (((v) & 0x0000ff)<<16) | \
33 (((v) & 0xff0000)>>16) \
41#define GP_SWAP_BYTES4(v) ( \
42 (((v) & 0xff000000)>>24) | \
43 (((v) & 0x00ff0000)>>8) | \
44 (((v) & 0x0000ff00)<<8) | \
45 (((v) & 0x000000ff)<<24) \
55#define GP_GET_BYTES1(src) (*((uint8_t *)(src)))
65#define GP_SET_BYTES1(dst, byte) *((uint8_t *)(dst)) = (byte)
74#if __BYTE_ORDER == __LITTLE_ENDIAN
75# define GP_GET_BYTES2_LE(src) (*((uint16_t *)(src)))
77# define GP_GET_BYTES2_LE(src) GP_SWAP_BYTES2(*((uint16_t *)(src)))
87#if __BYTE_ORDER == __LITTLE_ENDIAN
88# define GP_SET_BYTES2_LE(dst, bytes) *((uint16_t *)(dst)) = (bytes)
90# define GP_SET_BYTES2_LE(dst, bytes) *((uint16_t *)(dst)) = GP_SWAP_BYTES2(bytes)
100#if __BYTE_ORDER == __BIG_ENDIAN
101# define GP_GET_BYTES2_BE(src) (*((uint16_t *)(src)))
103# define GP_GET_BYTES2_BE(src) GP_SWAP_BYTES2(*((uint16_t *)(src)))
113#if __BYTE_ORDER == __BIG_ENDIAN
114# define GP_SET_BYTES2_BE(dst, bytes) *((uint16_t *)(dst)) = (bytes)
116# define GP_SET_BYTES2_BE(dst, bytes) *((uint16_t *)(dst)) = GP_SWAP_BYTES2(bytes)
126#if __BYTE_ORDER == __BIG_ENDIAN
127# define GP_GET_BYTES4_BE(src) *((uint32_t *)src)
129# define GP_GET_BYTES4_BE(src) GP_SWAP_BYTES4(*((uint16_t *)(src)))
139#if __BYTE_ORDER == __BIG_ENDIAN
140# define GP_SET_BYTES4_BE(dst, bytes) *((uint32_t *)(dst)) = (bytes)
142# define GP_SET_BYTES4_BE(dst, bytes) *((uint32_t *)(dst)) = GP_SWAP_BYTES4(bytes)
152#if __BYTE_ORDER == __LITTLE_ENDIAN
153# define GP_GET_BYTES4_LE(src) *((uint32_t *)src)
155# define GP_GET_BYTES4_LE(src) GP_SWAP_BYTES4(*((uint16_t *)(src)))
165#if __BYTE_ORDER == __LITTLE_ENDIAN
166# define GP_SET_BYTES4_LE(dst, bytes) *((uint32_t *)(dst)) = (bytes)
168# define GP_SET_BYTES4_LE(dst, bytes) *((uint32_t *)(dst)) = GP_SWAP_BYTES4(bytes)
A byte order (endians) defintions.