implement software endianness byte-swapping

This commit is contained in:
mykola2312 2022-04-29 04:48:48 +03:00
parent 4753e013aa
commit 30f3fd04df

View file

@ -21,7 +21,35 @@ static enum cu_endian_e endian_detect()
else return MiddleEndian;
}
static uint16_t sw_bswap16(uint16_t val)
{
return (val << 8) | (val >> 8);
}
static uint32_t sw_bswap32(uint32_t val)
{
return ((val >> 24) & 0xFF) << 0
| ((val >> 16) & 0xFF) << 8
| ((val >> 8) & 0xFF) << 16
| ((val >> 0) & 0xFF) << 24;
}
static uint64_t sw_bswap64(uint64_t val)
{
return ((val >> 56) & 0xFF) << 0
| ((val >> 48) & 0xFF) << 8
| ((val >> 40) & 0xFF) << 16
| ((val >> 32) & 0xFF) << 24
| ((val >> 24) & 0xFF) << 32
| ((val >> 16) & 0xFF) << 40
| ((val >> 8) & 0xFF) << 48
| ((val >> 0) & 0xFF) << 56;
}
#include <stdio.h>
void cu_endian_init()
{
cu_endian = endian_detect();
printf("%lx\t%lx\n", 0x12345678abcd8765, sw_bswap64(0x12345678abcd8765));
}