Endianness Conversion Library
A library for converting between endianness. Useful for reading binary data from files.
 
Loading...
Searching...
No Matches
conv_endian.h
Go to the documentation of this file.
1// This is free and unencumbered software released into the public domain.
2
3// Anyone is free to copy, modify, publish, use, compile, sell, or
4// distribute this software, either in source code form or as a compiled
5// binary, for any purpose, commercial or non-commercial, and by any
6// means.
7
8// In jurisdictions that recognize copyright laws, the author or authors
9// of this software dedicate any and all copyright interest in the
10// software to the public domain. We make this dedication for the benefit
11// of the public at large and to the detriment of our heirs and
12// successors. We intend this dedication to be an overt act of
13// relinquishment in perpetuity of all present and future rights to this
14// software under copyright law.
15
16// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19// IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22// OTHER DEALINGS IN THE SOFTWARE.
23
24// For more information, please refer to <https://unlicense.org>
25
26
29
30
31#ifndef CONV_ENDIAN_H
32#define CONV_ENDIAN_H
33
34#if __cplusplus
35extern "C" {
36#endif
37
38#include <stdint.h>
39
40/*
41
42 8-bit code is skipped because they defined endianess
43 as byte swapped integers and since a byte is 8 bits,
44 what is the whole point of including such code that
45 effectively does nothing
46
47*/
48
49/*
50
51 16-bit code begins here
52
53*/
54
55/*
56
57 16-bit signed integer starts here
58
59*/
60
64uint16_t read_le_u16(uint16_t val);
65
69uint16_t convert_to_le_u16(uint16_t val);
70
74uint16_t read_be_u16(uint16_t val);
75
79uint16_t convert_to_be_u16(uint16_t val);
80
81/*
82
83 16-bit signed integer starts here
84
85*/
86
90int16_t read_le_s16(int16_t val);
91
95int16_t convert_to_le_s16(int16_t val);
96
100int16_t read_be_s16(int16_t val);
101
105int16_t convert_to_be_s16(int16_t val);
106
107/*
108
109 16-bit code ends here
110
111 ---------------------------------------------------------------------------
112
113 32-bit code begins here
114
115*/
116
117/*
118
119 32-bit unsigned integer starts here
120
121*/
122
126uint32_t read_le_u32(uint32_t val);
127
131uint32_t convert_to_le_u32(uint32_t val);
132
136uint32_t read_be_u32(uint32_t val);
137
141uint32_t convert_to_be_u32(uint32_t val);
142
143/*
144
145 32-bit signed integer starts here
146
147*/
148
152int32_t read_le_s32(int32_t val);
153
157int32_t convert_to_le_s32(int32_t val);
158
162int32_t read_be_s32(int32_t val);
163
167int32_t convert_to_be_s32(int32_t val);
168
169
170/*
171
172 32-bit floating point starts here
173
174*/
175
179float read_le_f32(float val);
180
184float convert_to_le_f32(float val);
185
189float read_be_f32(float val);
190
194float convert_to_be_f32(float val);
195
196/*
197
198 32-bit code ends here
199
200 ---------------------------------------------------------------------------
201
202 64-bit code begins here
203
204*/
205
206/*
207
208 64-bit unsigned integer starts here
209
210*/
211
215uint64_t read_le_u64(uint64_t val);
216
220uint64_t convert_to_le_u64(uint64_t val);
221
225uint64_t read_be_u64(uint64_t val);
226
230uint64_t convert_to_be_u64(uint64_t val);
231
232
233/*
234
235 64-bit signed integer starts here
236
237*/
238
242int64_t read_le_s64(int64_t val);
243
247int64_t convert_to_le_s64(int64_t val);
248
252int64_t read_be_s64(int64_t val);
253
257int64_t convert_to_be_s64(int64_t val);
258
259/*
260
261 64-bit floating point starts here
262
263*/
264
268double read_le_f64(double val);
269
273double convert_to_le_f64(double val);
274
278double read_be_f64(double val);
279
283double convert_to_be_f64(double val);
284
285
286#ifdef __cplusplus
287}
288#endif
289
290#endif
uint64_t read_be_u64(uint64_t val)
Reads an 64-bit big endian integer number.
Definition conv_endian.c:389
int16_t read_be_s16(int16_t val)
Reads an 16-bit signed big endian integer number.
Definition conv_endian.c:109
uint32_t convert_to_le_u32(uint32_t val)
Writes an 32-bit unsigned little endian integer number.
Definition conv_endian.c:153
int32_t read_be_s32(int32_t val)
Reads an 32-bit signed big endian integer number.
Definition conv_endian.c:207
double read_le_f64(double val)
Reads an 64-bit little endian floating point number.
Definition conv_endian.c:510
double convert_to_le_f64(double val)
Writes an 64-bit little endian floating point number.
Definition conv_endian.c:536
int64_t convert_to_be_s64(int64_t val)
Writes an 64-bit big endian integer number.
Definition conv_endian.c:485
int32_t read_le_s32(int32_t val)
Reads an 32-bit signed little endian integer number.
Definition conv_endian.c:187
int32_t convert_to_le_s32(int32_t val)
Writes an 32-bit signed little endian integer number.
Definition conv_endian.c:197
uint64_t convert_to_le_u64(uint64_t val)
Writes an 64-bit little endian integer number.
Definition conv_endian.c:371
uint16_t read_le_u16(uint16_t val)
Reads an 16-bit unsigned little endian integer number.
Definition conv_endian.c:49
double read_be_f64(double val)
Reads an 64-bit big endian floating point number.
Definition conv_endian.c:563
uint64_t convert_to_be_u64(uint64_t val)
Writes an 64-bit big endian integer number.
Definition conv_endian.c:407
float read_le_f32(float val)
Reads an 32-bit little endian floating point number.
Definition conv_endian.c:247
float convert_to_le_f32(float val)
Writes an 32-bit little endian floating point number.
Definition conv_endian.c:269
uint32_t read_le_u32(uint32_t val)
Reads an 32-bit unsigned little endian integer number.
Definition conv_endian.c:143
int16_t convert_to_be_s16(int16_t val)
Writes an 16-bit signed big endian integer number.
Definition conv_endian.c:118
uint64_t read_le_u64(uint64_t val)
Reads an 64-bit little endian integer number.
Definition conv_endian.c:353
int64_t read_be_s64(int64_t val)
Reads an 64-bit big endian integer number.
Definition conv_endian.c:467
float convert_to_be_f32(float val)
Writes an 32-bit big endian floating point number.
Definition conv_endian.c:313
int16_t convert_to_le_s16(int16_t val)
Writes an 16-bit signed little endian integer number.
Definition conv_endian.c:100
uint32_t convert_to_be_u32(uint32_t val)
Writes an 32 bit unsigned big endian integer number.
Definition conv_endian.c:172
int16_t read_le_s16(int16_t val)
Reads an 16-bit signed little endian integer number.
Definition conv_endian.c:91
double convert_to_be_f64(double val)
Writes an 64-bit big endian floating point number.
Definition conv_endian.c:589
float read_be_f32(float val)
Reads an 32-bit big endian floating point number.
Definition conv_endian.c:291
uint16_t convert_to_be_u16(uint16_t val)
Writes an 16-bit unsigned big endian integer number.
Definition conv_endian.c:76
int32_t convert_to_be_s32(int32_t val)
Writes an 32-bit signed big endian integer number.
Definition conv_endian.c:224
int64_t convert_to_le_s64(int64_t val)
Writes an 64-bit little endian integer number.
Definition conv_endian.c:449
int64_t read_le_s64(int64_t val)
Reads an 64-bit little endian integer number.
Definition conv_endian.c:431
uint16_t read_be_u16(uint16_t val)
Reads an 16-bit unsigned big endian integer number.
Definition conv_endian.c:67
uint16_t convert_to_le_u16(uint16_t val)
Writes an 16-bit unsigned little endian integer number.
Definition conv_endian.c:58
uint32_t read_be_u32(uint32_t val)
Reads an 32-bit unsigned big endian integer number.
Definition conv_endian.c:163