Add big endian implementation for bytes.c
This commit is contained in:
parent
1be20dd542
commit
145424202b
1 changed files with 61 additions and 0 deletions
61
src/bytes.c
61
src/bytes.c
|
@ -1,8 +1,10 @@
|
||||||
|
#include <endian.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#include "haggis.h"
|
#include "haggis.h"
|
||||||
|
|
||||||
|
#if __BYTE_ORDER__ == __LITTLE_ENDIAN
|
||||||
u64 le_bytes_to_u64(u8 arr[8]) {
|
u64 le_bytes_to_u64(u8 arr[8]) {
|
||||||
return (u64)arr[7] << 56 |
|
return (u64)arr[7] << 56 |
|
||||||
(u64)arr[6] << 48 |
|
(u64)arr[6] << 48 |
|
||||||
|
@ -61,4 +63,63 @@ void u16_to_le_bytes(u16 num, u8 arr[2]) {
|
||||||
arr[0] = (u8)first;
|
arr[0] = (u8)first;
|
||||||
arr[1] = (u8)second;
|
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
|
||||||
|
|
Loading…
Add table
Reference in a new issue