forked from aikiriao/IMA-ADPCM
-
Notifications
You must be signed in to change notification settings - Fork 0
/
byte_array.h
135 lines (113 loc) · 5.13 KB
/
byte_array.h
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#ifndef BYTEARRAY_H_INCLUDED
#define BYTEARRAY_H_INCLUDED
#include <stdint.h>
/* 1バイト読み出し */
#define ByteArray_ReadUint8(p_array) \
(uint8_t)((p_array)[0])
/* 2バイト読み出し(ビッグエンディアン) */
#define ByteArray_ReadUint16BE(p_array) \
(uint16_t)( \
(((uint16_t)((p_array)[0])) << 8) | \
(((uint16_t)((p_array)[1])) << 0) \
)
/* 4バイト読み出し(ビッグエンディアン) */
#define ByteArray_ReadUint32BE(p_array) \
(uint32_t)( \
(((uint32_t)((p_array)[0])) << 24) | \
(((uint32_t)((p_array)[1])) << 16) | \
(((uint32_t)((p_array)[2])) << 8) | \
(((uint32_t)((p_array)[3])) << 0) \
)
/* 2バイト読み出し(リトルエンディアン) */
#define ByteArray_ReadUint16LE(p_array) \
(uint16_t)( \
(((uint16_t)((p_array)[0])) << 0) | \
(((uint16_t)((p_array)[1])) << 8) \
)
/* 4バイト読み出し(リトルエンディアン) */
#define ByteArray_ReadUint32LE(p_array) \
(uint32_t)( \
(((uint32_t)((p_array)[0])) << 0) | \
(((uint32_t)((p_array)[1])) << 8) | \
(((uint32_t)((p_array)[2])) << 16) | \
(((uint32_t)((p_array)[3])) << 24) \
)
/* 1バイト取得 */
#define ByteArray_GetUint8(p_array, p_u8val) { \
(*(p_u8val)) = ByteArray_ReadUint8(p_array); \
(p_array) += 1; \
}
/* 2バイト取得(ビッグエンディアン) */
#define ByteArray_GetUint16BE(p_array, p_u16val) { \
(*(p_u16val)) = ByteArray_ReadUint16BE(p_array); \
(p_array) += 2; \
}
/* 4バイト取得(ビッグエンディアン) */
#define ByteArray_GetUint32BE(p_array, p_u32val) { \
(*(p_u32val)) = ByteArray_ReadUint32BE(p_array); \
(p_array) += 4; \
}
/* 2バイト取得(リトルエンディアン) */
#define ByteArray_GetUint16LE(p_array, p_u16val) { \
(*(p_u16val)) = ByteArray_ReadUint16LE(p_array); \
(p_array) += 2; \
}
/* 4バイト取得(リトルエンディアン) */
#define ByteArray_GetUint32LE(p_array, p_u32val) { \
(*(p_u32val)) = ByteArray_ReadUint32LE(p_array); \
(p_array) += 4; \
}
/* 1バイト書き出し */
#define ByteArray_WriteUint8(p_array, u8val) { \
((p_array)[0]) = (uint8_t)(u8val); \
}
/* 2バイト書き出し(ビッグエンディアン) */
#define ByteArray_WriteUint16BE(p_array, u16val) { \
((p_array)[0]) = (uint8_t)(((u16val) >> 8) & 0xFF); \
((p_array)[1]) = (uint8_t)(((u16val) >> 0) & 0xFF); \
}
/* 4バイト書き出し(ビッグエンディアン) */
#define ByteArray_WriteUint32BE(p_array, u32val) { \
((p_array)[0]) = (uint8_t)(((u32val) >> 24) & 0xFF); \
((p_array)[1]) = (uint8_t)(((u32val) >> 16) & 0xFF); \
((p_array)[2]) = (uint8_t)(((u32val) >> 8) & 0xFF); \
((p_array)[3]) = (uint8_t)(((u32val) >> 0) & 0xFF); \
}
/* 2バイト書き出し(リトルエンディアン) */
#define ByteArray_WriteUint16LE(p_array, u16val) { \
((p_array)[0]) = (uint8_t)(((u16val) >> 0) & 0xFF); \
((p_array)[1]) = (uint8_t)(((u16val) >> 8) & 0xFF); \
}
/* 4バイト書き出し(リトルエンディアン) */
#define ByteArray_WriteUint32LE(p_array, u32val) { \
((p_array)[0]) = (uint8_t)(((u32val) >> 0) & 0xFF); \
((p_array)[1]) = (uint8_t)(((u32val) >> 8) & 0xFF); \
((p_array)[2]) = (uint8_t)(((u32val) >> 16) & 0xFF); \
((p_array)[3]) = (uint8_t)(((u32val) >> 24) & 0xFF); \
}
/* 1バイト出力 */
#define ByteArray_PutUint8(p_array, u8val) { \
ByteArray_WriteUint8(p_array, u8val); \
(p_array) += 1; \
}
/* 2バイト出力(ビッグエンディアン) */
#define ByteArray_PutUint16BE(p_array, u16val) { \
ByteArray_WriteUint16BE(p_array, u16val); \
(p_array) += 2; \
}
/* 4バイト出力(ビッグエンディアン) */
#define ByteArray_PutUint32BE(p_array, u32val) { \
ByteArray_WriteUint32BE(p_array, u32val); \
(p_array) += 4; \
}
/* 2バイト出力(リトルエンディアン) */
#define ByteArray_PutUint16LE(p_array, u16val) { \
ByteArray_WriteUint16LE(p_array, u16val); \
(p_array) += 2; \
}
/* 4バイト出力(リトルエンディアン) */
#define ByteArray_PutUint32LE(p_array, u32val) { \
ByteArray_WriteUint32LE(p_array, u32val); \
(p_array) += 4; \
}
#endif /* BYTEARRAY_H_INCLUDED */