Add big endian implementation for bytes.c

This commit is contained in:
Nathan Fisher 2023-07-21 00:09:42 -04:00
parent 1be20dd542
commit 145424202b

View file

@ -1,8 +1,10 @@
#include <endian.h>
#include <stdio.h>
#include <stdint.h>
#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