Files
bluelib/core/endian.c

213 lines
2.8 KiB
C

#include <blue/core/endian.h>
b_i16 b_i16_htob(uint16_t v)
{
b_i16 x;
#ifdef BIG_ENDIAN
x.i_uval = v;
#else
uint8_t *b = (uint8_t *)&v;
x.i_bytes[0] = b[1];
x.i_bytes[1] = b[0];
#endif
return x;
}
b_i16 b_i16_htos(uint16_t v)
{
b_i16 x;
#ifdef LITTLE_ENDIAN
x.i_uval = v;
#else
uint8_t *b = (uint8_t *)&v;
x.i_bytes[0] = b[1];
x.i_bytes[1] = b[0];
#endif
return x;
}
uint16_t b_i16_btoh(b_i16 v)
{
uint16_t x;
#ifdef BIG_ENDIAN
x = v.i_uval;
#else
uint8_t *b = (uint8_t *)&x;
b[0] = v.i_bytes[1];
b[1] = v.i_bytes[0];
#endif
return x;
}
uint16_t b_i16_stoh(b_i16 v)
{
uint16_t x;
#ifdef LITTLE_ENDIAN
x = v.i_uval;
#else
uint8_t *b = (uint8_t *)&x;
b[0] = v.i_bytes[1];
b[1] = v.i_bytes[0];
#endif
return x;
}
b_i32 b_i32_htob(uint32_t v)
{
b_i32 x;
#ifdef BIG_ENDIAN
x.i_uval = v;
#else
uint8_t *b = (uint8_t *)&v;
x.i_bytes[0] = b[3];
x.i_bytes[1] = b[2];
x.i_bytes[2] = b[1];
x.i_bytes[3] = b[0];
#endif
return x;
}
b_i32 b_i32_htos(uint32_t v)
{
b_i32 x;
#ifdef LITTLE_ENDIAN
x.i_uval = v;
#else
uint8_t *b = (uint8_t *)&v;
x.i_bytes[0] = b[3];
x.i_bytes[1] = b[2];
x.i_bytes[2] = b[1];
x.i_bytes[3] = b[0];
#endif
return x;
}
uint32_t b_i32_btoh(b_i32 v)
{
uint32_t x;
#ifdef BIG_ENDIAN
x = v.i_uval;
#else
uint8_t *b = (uint8_t *)&x;
b[0] = v.i_bytes[3];
b[1] = v.i_bytes[2];
b[2] = v.i_bytes[1];
b[3] = v.i_bytes[0];
#endif
return x;
}
uint32_t b_i32_stoh(b_i32 v)
{
uint32_t x;
#ifdef LITTLE_ENDIAN
x = v.i_uval;
#else
uint8_t *b = (uint8_t *)&x;
b[0] = v.i_bytes[3];
b[1] = v.i_bytes[2];
b[2] = v.i_bytes[1];
b[3] = v.i_bytes[0];
#endif
return x;
}
b_i64 b_i64_htob(uint64_t v)
{
b_i64 x;
#ifdef BIG_ENDIAN
x.i_uval = v;
#else
uint8_t *b = (uint8_t *)&v;
x.i_bytes[0] = b[7];
x.i_bytes[1] = b[6];
x.i_bytes[2] = b[5];
x.i_bytes[3] = b[4];
x.i_bytes[4] = b[3];
x.i_bytes[5] = b[2];
x.i_bytes[6] = b[1];
x.i_bytes[7] = b[0];
#endif
return x;
}
b_i64 b_i64_htos(uint64_t v)
{
b_i64 x;
#ifdef LITTLE_ENDIAN
x.i_uval = v;
#else
uint8_t *b = (uint8_t *)&v;
x.i_bytes[0] = b[7];
x.i_bytes[1] = b[6];
x.i_bytes[2] = b[5];
x.i_bytes[3] = b[4];
x.i_bytes[4] = b[3];
x.i_bytes[5] = b[2];
x.i_bytes[6] = b[1];
x.i_bytes[7] = b[0];
#endif
return x;
}
uint64_t b_i64_btoh(b_i64 v)
{
uint64_t x;
#ifdef BIG_ENDIAN
x = v.i_uval;
#else
uint8_t *b = (uint8_t *)&x;
b[0] = v.i_bytes[7];
b[1] = v.i_bytes[6];
b[2] = v.i_bytes[5];
b[3] = v.i_bytes[4];
b[4] = v.i_bytes[3];
b[5] = v.i_bytes[2];
b[6] = v.i_bytes[1];
b[7] = v.i_bytes[0];
#endif
return x;
}
uint64_t b_i64_stoh(b_i64 v)
{
uint64_t x;
#ifdef LITTLE_ENDIAN
x = v.i_uval;
#else
uint8_t *b = (uint8_t *)&x;
b[0] = v.i_bytes[7];
b[1] = v.i_bytes[6];
b[2] = v.i_bytes[5];
b[3] = v.i_bytes[4];
b[4] = v.i_bytes[3];
b[5] = v.i_bytes[2];
b[6] = v.i_bytes[1];
b[7] = v.i_bytes[0];
#endif
return x;
}