77 inline void endian_16lo8 (uint_least16_t &word, uint8_t byte)
84 inline uint8_t endian_16lo8 (uint_least16_t word)
86 return (uint8_t) word;
90 inline void endian_16hi8 (uint_least16_t &word, uint8_t byte)
93 word |= (uint_least16_t) byte << 8;
97 inline uint8_t endian_16hi8 (uint_least16_t word)
99 return (uint8_t) (word >> 8);
103 inline void endian_16swap8 (uint_least16_t &word)
105 uint8_t lo = endian_16lo8 (word);
106 uint8_t hi = endian_16hi8 (word);
107 endian_16lo8 (word, hi);
108 endian_16hi8 (word, lo);
112 inline uint_least16_t endian_16 (uint8_t hi, uint8_t lo)
114 uint_least16_t word = 0;
115 endian_16lo8 (word, lo);
116 endian_16hi8 (word, hi);
121 inline void endian_16 (uint8_t ptr[2], uint_least16_t word)
123 # if defined(WORDS_BIGENDIAN)
124 ptr[0] = endian_16hi8 (word);
125 ptr[1] = endian_16lo8 (word);
127 ptr[0] = endian_16lo8 (word);
128 ptr[1] = endian_16hi8 (word);
132 inline void endian_16 (
char ptr[2], uint_least16_t word)
134 endian_16 ((uint8_t *) ptr, word);
138 inline uint_least16_t endian_little16 (
const uint8_t ptr[2])
140 return endian_16 (ptr[1], ptr[0]);
144 inline void endian_little16 (uint8_t ptr[2], uint_least16_t word)
146 ptr[0] = endian_16lo8 (word);
147 ptr[1] = endian_16hi8 (word);
151 inline uint_least16_t endian_big16 (
const uint8_t ptr[2])
153 return endian_16 (ptr[0], ptr[1]);
157 inline void endian_big16 (uint8_t ptr[2], uint_least16_t word)
159 ptr[0] = endian_16hi8 (word);
160 ptr[1] = endian_16lo8 (word);
168 inline void endian_32lo16 (uint_least32_t &dword, uint_least16_t word)
170 dword &= (uint_least32_t) 0xffff0000;
175 inline uint_least16_t endian_32lo16 (uint_least32_t dword)
177 return (uint_least16_t) dword & 0xffff;
181 inline void endian_32hi16 (uint_least32_t &dword, uint_least16_t word)
183 dword &= (uint_least32_t) 0x0000ffff;
184 dword |= (uint_least32_t) word << 16;
188 inline uint_least16_t endian_32hi16 (uint_least32_t dword)
190 return (uint_least16_t) (dword >> 16);
194 inline void endian_32lo8 (uint_least32_t &dword, uint8_t byte)
196 dword &= (uint_least32_t) 0xffffff00;
197 dword |= (uint_least32_t) byte;
201 inline uint8_t endian_32lo8 (uint_least32_t dword)
203 return (uint8_t) dword;
207 inline void endian_32hi8 (uint_least32_t &dword, uint8_t byte)
209 dword &= (uint_least32_t) 0xffff00ff;
210 dword |= (uint_least32_t) byte << 8;
214 inline uint8_t endian_32hi8 (uint_least32_t dword)
216 return (uint8_t) (dword >> 8);
220 inline void endian_32swap16 (uint_least32_t &dword)
222 uint_least16_t lo = endian_32lo16 (dword);
223 uint_least16_t hi = endian_32hi16 (dword);
224 endian_32lo16 (dword, hi);
225 endian_32hi16 (dword, lo);
229 inline void endian_32swap8 (uint_least32_t &dword)
231 uint_least16_t lo = 0, hi = 0;
232 lo = endian_32lo16 (dword);
233 hi = endian_32hi16 (dword);
236 endian_32lo16 (dword, hi);
237 endian_32hi16 (dword, lo);
241 inline uint_least32_t endian_32 (uint8_t hihi, uint8_t hilo, uint8_t hi, uint8_t lo)
243 uint_least32_t dword = 0;
244 uint_least16_t word = 0;
245 endian_32lo8 (dword, lo);
246 endian_32hi8 (dword, hi);
247 endian_16lo8 (word, hilo);
248 endian_16hi8 (word, hihi);
249 endian_32hi16 (dword, word);
254 inline uint_least32_t endian_little32 (
const uint8_t ptr[4])
256 return endian_32 (ptr[3], ptr[2], ptr[1], ptr[0]);
260 inline void endian_little32 (uint8_t ptr[4], uint_least32_t dword)
262 uint_least16_t word = 0;
263 ptr[0] = endian_32lo8 (dword);
264 ptr[1] = endian_32hi8 (dword);
265 word = endian_32hi16 (dword);
266 ptr[2] = endian_16lo8 (word);
267 ptr[3] = endian_16hi8 (word);
271 inline uint_least32_t endian_big32 (
const uint8_t ptr[4])
273 return endian_32 (ptr[0], ptr[1], ptr[2], ptr[3]);
277 inline void endian_big32 (uint8_t ptr[4], uint_least32_t dword)
279 uint_least16_t word = 0;
280 word = endian_32hi16 (dword);
281 ptr[1] = endian_16lo8 (word);
282 ptr[0] = endian_16hi8 (word);
283 ptr[2] = endian_32hi8 (dword);
284 ptr[3] = endian_32lo8 (dword);
287 #endif // _sidendian_h_