Intrusive Containers
Endian.h
Go to the documentation of this file.
1 #ifndef ENDIAN_H
2 #define ENDIAN_H
3 
35 #include <stdint.h>
39 namespace Endian {
44  inline static int endianTest() {
45  int16_t i = 1;
46  return *(char *)&i;
47  }
54  inline int16_t get16LE(void const* buffer) {
55  unsigned char const* buf = static_cast<unsigned char const*>(buffer);
56  return (buf[1] << 8) + buf[0];
57  }
58 
65  inline uint16_t getU16LE(void const* buffer) {
66  unsigned char const* buf = static_cast<unsigned char const*>(buffer);
67  return (buf[1] << 8) + buf[0];
68  }
76  inline int32_t get32LE(void const* buffer) {
77  unsigned char const* buf = static_cast<unsigned char const*>(buffer);
78  return (buf[3] << 24) + (buf[2] << 16) + (buf[1] << 8) + buf[0];
79  }
80 
87  inline uint32_t getU32LE(void const* buffer) {
88  unsigned char const* buf = static_cast<unsigned char const*>(buffer);
89  return (buf[3] << 24) + (buf[2] << 16) + (buf[1] << 8) + buf[0];
90  }
91 
100  inline float getFloatLE(void const* buffer) {
101  union {
102  char b[4];
103  float f;
104  } u;
105  unsigned char const* buf = static_cast<unsigned char const*>(buffer);
106  if (endianTest()) {
107  for (int i = 0; i < 4; i++) {
108  u.b[i] = buf[i];
109  }
110  } else {
111  for (int i = 0; i < 4; i++) {
112  u.b[3-i] = buf[i];
113  }
114 
115  }
116  return u.f;
117  }
118 
127  inline double getDoubleLE(void const* buffer) {
128  union {
129  char b[8];
130  double f;
131  } u;
132  unsigned char const* buf = static_cast<unsigned char const*>(buffer);
133  if (endianTest()) {
134  for (int i = 0; i < 8; i++) {
135  u.b[i] = buf[i];
136  }
137  } else {
138  for (int i = 0; i < 8; i++) {
139  u.b[7 - i] = buf[i];
140  }
141 
142  }
143  return u.f;
144  }
145 
152  inline int16_t get16BE(void const* buffer) {
153  unsigned char const* buf = static_cast<unsigned char const*>(buffer);
154  return (buf[0] << 8) + buf[1];
155  }
156 
163  inline uint16_t getU16BE(void const* buffer) {
164  unsigned char const* buf = static_cast<unsigned char const*>(buffer);
165  return (buf[0] << 8) + buf[1];
166  }
167 
174  inline int32_t get32BE(void const* buffer) {
175  unsigned char const* buf = static_cast<unsigned char const*>(buffer);
176  return (buf[0] << 24) + (buf[1] << 16) + (buf[2] << 8) + buf[3];
177  }
178 
185  inline uint32_t getU32BE(void const* buffer) {
186  unsigned char const* buf = static_cast<unsigned char const*>(buffer);
187  return (buf[0] << 24) + (buf[1] << 16) + (buf[2] << 8) + buf[3];
188  }
189 
198  inline float getFloatBE(void const* buffer) {
199  union {
200  char b[4];
201  float f;
202  } u;
203  unsigned char const* buf = static_cast<unsigned char const*>(buffer);
204  if (endianTest()) {
205  for (int i = 0; i < 4; i++) {
206  u.b[3 - i] = buf[i];
207  }
208  } else {
209  for (int i = 0; i < 4; i++) {
210  u.b[i] = buf[i];
211  }
212 
213  }
214  return u.f;
215 
216  }
217 
226  inline double getDouble(void const* buffer) {
227  union {
228  char b[8];
229  double f;
230  } u;
231  unsigned char const* buf = static_cast<unsigned char const*>(buffer);
232  if (endianTest()) {
233  for (int i = 0; i < 8; i++) {
234  u.b[7 - i] = buf[i];
235  }
236  } else {
237  for (int i = 0; i < 8; i++) {
238  u.b[i] = buf[i];
239  }
240 
241  }
242  return u.f;
243  }
244 };
245 
246 #endif
float getFloatLE(void const *buffer)
Definition: Endian.h:100
float getFloatBE(void const *buffer)
Definition: Endian.h:198
double getDouble(void const *buffer)
Definition: Endian.h:226
Definition: Endian.h:39
int16_t get16BE(void const *buffer)
Definition: Endian.h:152
uint32_t getU32BE(void const *buffer)
Definition: Endian.h:185
double getDoubleLE(void const *buffer)
Definition: Endian.h:127
int32_t get32LE(void const *buffer)
Definition: Endian.h:76
uint16_t getU16BE(void const *buffer)
Definition: Endian.h:163
int16_t get16LE(void const *buffer)
Definition: Endian.h:54
uint32_t getU32LE(void const *buffer)
Definition: Endian.h:87
int32_t get32BE(void const *buffer)
Definition: Endian.h:174
uint16_t getU16LE(void const *buffer)
Definition: Endian.h:65