Add 'bytes.c' for bytearray-uint conversions
This commit is contained in:
parent
9d3d12eea7
commit
197a49934d
2 changed files with 68 additions and 0 deletions
|
@ -35,6 +35,18 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
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;
|
||||
|
|
56
src/bytes.c
Normal file
56
src/bytes.c
Normal file
|
@ -0,0 +1,56 @@
|
|||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#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]);
|
||||
}
|
Loading…
Add table
Reference in a new issue