43 inline void endian_16lo8 (uint_least16_t &word, uint8_t
byte)
50 inline uint8_t endian_16lo8 (uint_least16_t word)
52 return (uint8_t) word;
56 inline void endian_16hi8 (uint_least16_t &word, uint8_t
byte)
59 word |= (uint_least16_t)
byte << 8;
63 inline uint8_t endian_16hi8 (uint_least16_t word)
65 return (uint8_t) (word >> 8);
69 inline void endian_16swap8 (uint_least16_t &word)
71 uint8_t lo = endian_16lo8 (word);
72 uint8_t hi = endian_16hi8 (word);
73 endian_16lo8 (word, hi);
74 endian_16hi8 (word, lo);
78 inline uint_least16_t endian_16 (uint8_t hi, uint8_t lo)
80 uint_least16_t word = 0;
81 endian_16lo8 (word, lo);
82 endian_16hi8 (word, hi);
87 inline void endian_16 (uint8_t ptr[2], uint_least16_t word)
89 #if defined(WORDS_BIGENDIAN)
90 ptr[0] = endian_16hi8 (word);
91 ptr[1] = endian_16lo8 (word);
93 ptr[0] = endian_16lo8 (word);
94 ptr[1] = endian_16hi8 (word);
98 inline void endian_16 (
char ptr[2], uint_least16_t word)
100 endian_16 ((uint8_t *) ptr, word);
104 inline uint_least16_t endian_little16 (
const uint8_t ptr[2])
106 return endian_16 (ptr[1], ptr[0]);
110 inline void endian_little16 (uint8_t ptr[2], uint_least16_t word)
112 ptr[0] = endian_16lo8 (word);
113 ptr[1] = endian_16hi8 (word);
117 inline uint_least16_t endian_big16 (
const uint8_t ptr[2])
119 return endian_16 (ptr[0], ptr[1]);
123 inline void endian_big16 (uint8_t ptr[2], uint_least16_t word)
125 ptr[0] = endian_16hi8 (word);
126 ptr[1] = endian_16lo8 (word);
134 inline void endian_32lo16 (uint_least32_t &dword, uint_least16_t word)
136 dword &= (uint_least32_t) 0xffff0000;
141 inline uint_least16_t endian_32lo16 (uint_least32_t dword)
143 return (uint_least16_t) dword & 0xffff;
147 inline void endian_32hi16 (uint_least32_t &dword, uint_least16_t word)
149 dword &= (uint_least32_t) 0x0000ffff;
150 dword |= (uint_least32_t) word << 16;
154 inline uint_least16_t endian_32hi16 (uint_least32_t dword)
156 return (uint_least16_t) (dword >> 16);
160 inline void endian_32lo8 (uint_least32_t &dword, uint8_t
byte)
162 dword &= (uint_least32_t) 0xffffff00;
163 dword |= (uint_least32_t)
byte;
167 inline uint8_t endian_32lo8 (uint_least32_t dword)
169 return (uint8_t) dword;
173 inline void endian_32hi8 (uint_least32_t &dword, uint8_t
byte)
175 dword &= (uint_least32_t) 0xffff00ff;
176 dword |= (uint_least32_t)
byte << 8;
180 inline uint8_t endian_32hi8 (uint_least32_t dword)
182 return (uint8_t) (dword >> 8);
186 inline void endian_32swap16 (uint_least32_t &dword)
188 uint_least16_t lo = endian_32lo16 (dword);
189 uint_least16_t hi = endian_32hi16 (dword);
190 endian_32lo16 (dword, hi);
191 endian_32hi16 (dword, lo);
195 inline void endian_32swap8 (uint_least32_t &dword)
197 uint_least16_t lo = 0, hi = 0;
198 lo = endian_32lo16 (dword);
199 hi = endian_32hi16 (dword);
202 endian_32lo16 (dword, hi);
203 endian_32hi16 (dword, lo);
207 inline uint_least32_t endian_32 (uint8_t hihi, uint8_t hilo, uint8_t hi, uint8_t lo)
209 uint_least32_t dword = 0;
210 uint_least16_t word = 0;
211 endian_32lo8 (dword, lo);
212 endian_32hi8 (dword, hi);
213 endian_16lo8 (word, hilo);
214 endian_16hi8 (word, hihi);
215 endian_32hi16 (dword, word);
220 inline uint_least32_t endian_little32 (
const uint8_t ptr[4])
222 return endian_32 (ptr[3], ptr[2], ptr[1], ptr[0]);
226 inline void endian_little32 (uint8_t ptr[4], uint_least32_t dword)
228 uint_least16_t word = 0;
229 ptr[0] = endian_32lo8 (dword);
230 ptr[1] = endian_32hi8 (dword);
231 word = endian_32hi16 (dword);
232 ptr[2] = endian_16lo8 (word);
233 ptr[3] = endian_16hi8 (word);
237 inline uint_least32_t endian_big32 (
const uint8_t ptr[4])
239 return endian_32 (ptr[0], ptr[1], ptr[2], ptr[3]);
243 inline void endian_big32 (uint8_t ptr[4], uint_least32_t dword)
245 uint_least16_t word = 0;
246 word = endian_32hi16 (dword);
247 ptr[1] = endian_16lo8 (word);
248 ptr[0] = endian_16hi8 (word);
249 ptr[2] = endian_32hi8 (dword);
250 ptr[3] = endian_32lo8 (dword);
253 #endif // SIDENDIAN_H