meta: move endian functions from object to core
This commit is contained in:
213
core/endian.c
Normal file
213
core/endian.c
Normal file
@@ -0,0 +1,213 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user