From 30f3fd04df7faba5af2a5801c592fa5a4c324fac Mon Sep 17 00:00:00 2001 From: mykola2312 <49044616+mykola2312@users.noreply.github.com> Date: Fri, 29 Apr 2022 04:48:48 +0300 Subject: [PATCH] implement software endianness byte-swapping --- endian.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/endian.c b/endian.c index 6a1d158..77142e5 100644 --- a/endian.c +++ b/endian.c @@ -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 + void cu_endian_init() { cu_endian = endian_detect(); + printf("%lx\t%lx\n", 0x12345678abcd8765, sw_bswap64(0x12345678abcd8765)); }