blob: 02cff815921a6dfb41f7fb178fc0bbc6715ccd7a (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
#pragma once
/* SPDX-License-Identifier: MIT */
#ifndef UNALIGNED_H
#define UNALIGNED_H
/*
* Unaligned little-endian memory access. See Chris Wellons' excellent post at
* https://nullprogram.com/blog/2016/11/22/ if you're confused by this.
*/
#include <stdint.h>
static inline uint16_t
get_u16(const uint8_t *buf)
{
return (uint16_t)buf[1] << 8 | (uint16_t)buf[0] << 0;
}
static inline uint32_t
get_u32(const uint8_t *buf)
{
return (uint32_t)buf[3] << 24 | (uint32_t)buf[2] << 16 |
(uint32_t)buf[1] << 8 | (uint32_t)buf[0] << 0;
}
static inline uint64_t
get_u64(const uint8_t *buf)
{
return (uint64_t)buf[7] << 56 | (uint64_t)buf[6] << 48 |
(uint64_t)buf[5] << 40 | (uint64_t)buf[4] << 32 |
(uint64_t)buf[3] << 24 | (uint64_t)buf[2] << 16 |
(uint64_t)buf[1] << 8 | (uint64_t)buf[0] << 0;
}
static inline void
set_u16(uint8_t *buf, const uint16_t val)
{
buf[0] = val >> 0;
buf[1] = val >> 8;
}
static inline void
set_u32(uint8_t *buf, const uint32_t val)
{
buf[0] = val >> 0;
buf[1] = val >> 8;
buf[2] = val >> 16;
buf[3] = val >> 24;
}
static inline void
set_u64(uint8_t *buf, const uint64_t val)
{
buf[0] = val >> 0;
buf[1] = val >> 8;
buf[2] = val >> 16;
buf[3] = val >> 24;
buf[4] = val >> 32;
buf[5] = val >> 40;
buf[6] = val >> 48;
buf[7] = val >> 56;
}
#endif
|