From 197a49934de8b10013acecc83f49af7e11e3d36a Mon Sep 17 00:00:00 2001 From: Nathan Fisher Date: Thu, 20 Jul 2023 18:20:04 -0400 Subject: [PATCH] Add 'bytes.c' for bytearray-uint conversions --- include/haggis.h | 12 +++++++++++ src/bytes.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 src/bytes.c diff --git a/include/haggis.h b/include/haggis.h index 3a26776..a0eb9ce 100644 --- a/include/haggis.h +++ b/include/haggis.h @@ -35,6 +35,18 @@ #include +typedef uint64_t u64; +typedef uint32_t u32; +typedef uint16_t u16; +typedef uint8_t u8; + +u64 le_bytes_to_u64(u8 arr[8]); +u32 le_bytes_to_u32(u8 arr[4]); +u16 le_bytes_to_u16(u8 arr[2]); +void u64_to_le_bytes(u64 num, u8 arr[8]); +void u32_to_le_bytes(u32 num, u8 arr[4]); +void u16_to_le_bytes(u16 num, u8 arr[2]); + struct haggis_device { uint32_t major; uint32_t minor; diff --git a/src/bytes.c b/src/bytes.c new file mode 100644 index 0000000..4926603 --- /dev/null +++ b/src/bytes.c @@ -0,0 +1,56 @@ +#include +#include + +#include "haggis.h" + +u64 le_bytes_to_u64(u8 arr[8]) { + return (u64)arr[7] << 56 | + (u64)arr[6] << 48 | + (u64)arr[5] << 40 | + (u64)arr[4] << 32 | + (u64)arr[3] << 24 | + (u64)arr[2] << 16 | + (u64)arr[1] << 8 | + (u64)arr[0]; +} + +u32 le_bytes_to_u32(u8 arr[4]) { + return (u32)arr[3] << 24 | + (u32)arr[2] << 16 | + (u32)arr[1] << 8 | + (u32)arr[0]; +} + +u16 le_bytes_to_u16(u8 arr[2]) { + return (u32)arr[1] << 8 | (u32)arr[0]; +} + +void u64_to_le_bytes(u64 num, u8 arr[8]) { + // todo +} + +void u32_to_le_bytes(u32 num, u8 arr[4]) { + u32 fourth = (num & 0xFF000000) >> 24; + u32 third = (num & 0x00FF0000) >> 16; + u32 second = (num & 0x0000FF00) >> 8; + u32 first = num & 0x000000FF; + 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]) { + // todo +} + +int main() { + u8 arr[4] = { 42, 1, 0, 0 }; + u8 new_arr[4]; + u32 num; + + num = le_bytes_to_u32(arr); + printf("Num: %i\n", num); + u32_to_le_bytes(num, new_arr); + printf("Array: { %i, %i, %i, %i };\n", new_arr[0], new_arr[1], new_arr[2], new_arr[3]); +}