From 145424202ba3ed740cff32e72c2a91bc518b3f4e Mon Sep 17 00:00:00 2001 From: Nathan Fisher Date: Fri, 21 Jul 2023 00:09:42 -0400 Subject: [PATCH] Add big endian implementation for bytes.c --- src/bytes.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/src/bytes.c b/src/bytes.c index c54debd..0ca9290 100644 --- a/src/bytes.c +++ b/src/bytes.c @@ -1,8 +1,10 @@ +#include #include #include #include "haggis.h" +#if __BYTE_ORDER__ == __LITTLE_ENDIAN u64 le_bytes_to_u64(u8 arr[8]) { return (u64)arr[7] << 56 | (u64)arr[6] << 48 | @@ -61,4 +63,63 @@ void u16_to_le_bytes(u16 num, u8 arr[2]) { arr[0] = (u8)first; arr[1] = (u8)second; } +#else +u64 le_bytes_to_u64(u8 arr[8]) { + return (u64)arr[0] << 56 | + (u64)arr[1] << 48 | + (u64)arr[2] << 40 | + (u64)arr[3] << 32 | + (u64)arr[4] << 24 | + (u64)arr[5] << 16 | + (u64)arr[6] << 8 | + (u64)arr[7]; +} +u32 le_bytes_to_u32(u8 arr[4]) { + return (u32)arr[0] << 24 | + (u32)arr[1] << 16 | + (u32)arr[2] << 8 | + (u32)arr[3]; +} + +u16 le_bytes_to_u16(u8 arr[2]) { + return (u32)arr[0] << 8 | (u32)arr[1]; +} + +void u64_to_le_bytes(u64 num, u8 arr[8]) { + u64 first = (num & 0xFF00000000000000) >> 56; + u64 second = (num & 0xFF000000000000) >> 48; + u64 third = (num & 0xFF0000000000) >> 40; + u64 fourth = (num & 0xFF00000000) >> 32; + u64 fifth = (num & 0xFF000000) >> 24; + u64 sixth = (num & 0xFF0000) >> 16; + u64 seventh = (num & 0xFF00) >> 8; + u64 eighth = num & 0xFF; + arr[0] = (u8)first; + arr[1] = (u8)second; + arr[2] = (u8)third; + arr[3] = (u8)fourth; + arr[4] = (u8)fifth; + arr[5] = (u8)sixth; + arr[6] = (u8)seventh; + arr[7] = (u8)eighth; +} + +void u32_to_le_bytes(u32 num, u8 arr[4]) { + u32 first = (num & 0xFF000000) >> 24; + u32 second = (num & 0xFF0000) >> 16; + u32 third = (num & 0xFF00) >> 8; + u32 fourth = num & 0xFF; + arr[0] = (u8)first; + arr[1] = (u8)second; + arr[2] = (u8)third; + arr[3] = (u8)fourth; +} + +void u16_to_le_bytes(u16 num, u8 arr[2]) { + u16 first = (num & 0xFF00) >> 8; + u16 second = num & 0xFF; + arr[0] = (u8)first; + arr[1] = (u8)second; +} +#endif