51 inline void endian_16lo8 (uint_least16_t &word, uint8_t byte)
58 inline uint8_t endian_16lo8 (uint_least16_t word)
60 return (uint8_t) word;
64 inline void endian_16hi8 (uint_least16_t &word, uint8_t byte)
67 word |= (uint_least16_t) byte << 8;
71 inline uint8_t endian_16hi8 (uint_least16_t word)
73 return (uint8_t) (word >> 8);
77 inline void endian_16swap8 (uint_least16_t &word)
79 uint8_t lo = endian_16lo8 (word);
80 uint8_t hi = endian_16hi8 (word);
81 endian_16lo8 (word, hi);
82 endian_16hi8 (word, lo);
86 inline uint_least16_t endian_16 (uint8_t hi, uint8_t lo)
88 uint_least16_t word = 0;
89 endian_16lo8 (word, lo);
90 endian_16hi8 (word, hi);
95 inline void endian_16 (uint8_t ptr[2], uint_least16_t word)
97 # if defined(WORDS_BIGENDIAN)
98 ptr[0] = endian_16hi8 (word);
99 ptr[1] = endian_16lo8 (word);
101 ptr[0] = endian_16lo8 (word);
102 ptr[1] = endian_16hi8 (word);
106 inline void endian_16 (
char ptr[2], uint_least16_t word)
108 endian_16 ((uint8_t *) ptr, word);
112 inline uint_least16_t endian_little16 (
const uint8_t ptr[2])
114 return endian_16 (ptr[1], ptr[0]);
118 inline void endian_little16 (uint8_t ptr[2], uint_least16_t word)
120 ptr[0] = endian_16lo8 (word);
121 ptr[1] = endian_16hi8 (word);
125 inline uint_least16_t endian_big16 (
const uint8_t ptr[2])
127 return endian_16 (ptr[0], ptr[1]);
131 inline void endian_big16 (uint8_t ptr[2], uint_least16_t word)
133 ptr[0] = endian_16hi8 (word);
134 ptr[1] = endian_16lo8 (word);
142 inline void endian_32lo16 (uint_least32_t &dword, uint_least16_t word)
144 dword &= (uint_least32_t) 0xffff0000;
149 inline uint_least16_t endian_32lo16 (uint_least32_t dword)
151 return (uint_least16_t) dword & 0xffff;
155 inline void endian_32hi16 (uint_least32_t &dword, uint_least16_t word)
157 dword &= (uint_least32_t) 0x0000ffff;
158 dword |= (uint_least32_t) word << 16;
162 inline uint_least16_t endian_32hi16 (uint_least32_t dword)
164 return (uint_least16_t) (dword >> 16);
168 inline void endian_32lo8 (uint_least32_t &dword, uint8_t byte)
170 dword &= (uint_least32_t) 0xffffff00;
171 dword |= (uint_least32_t) byte;
175 inline uint8_t endian_32lo8 (uint_least32_t dword)
177 return (uint8_t) dword;
181 inline void endian_32hi8 (uint_least32_t &dword, uint8_t byte)
183 dword &= (uint_least32_t) 0xffff00ff;
184 dword |= (uint_least32_t) byte << 8;
188 inline uint8_t endian_32hi8 (uint_least32_t dword)
190 return (uint8_t) (dword >> 8);
194 inline void endian_32swap16 (uint_least32_t &dword)
196 uint_least16_t lo = endian_32lo16 (dword);
197 uint_least16_t hi = endian_32hi16 (dword);
198 endian_32lo16 (dword, hi);
199 endian_32hi16 (dword, lo);
203 inline void endian_32swap8 (uint_least32_t &dword)
205 uint_least16_t lo = 0, hi = 0;
206 lo = endian_32lo16 (dword);
207 hi = endian_32hi16 (dword);
210 endian_32lo16 (dword, hi);
211 endian_32hi16 (dword, lo);
215 inline uint_least32_t endian_32 (uint8_t hihi, uint8_t hilo, uint8_t hi, uint8_t lo)
217 uint_least32_t dword = 0;
218 uint_least16_t word = 0;
219 endian_32lo8 (dword, lo);
220 endian_32hi8 (dword, hi);
221 endian_16lo8 (word, hilo);
222 endian_16hi8 (word, hihi);
223 endian_32hi16 (dword, word);
228 inline uint_least32_t endian_little32 (
const uint8_t ptr[4])
230 return endian_32 (ptr[3], ptr[2], ptr[1], ptr[0]);
234 inline void endian_little32 (uint8_t ptr[4], uint_least32_t dword)
236 uint_least16_t word = 0;
237 ptr[0] = endian_32lo8 (dword);
238 ptr[1] = endian_32hi8 (dword);
239 word = endian_32hi16 (dword);
240 ptr[2] = endian_16lo8 (word);
241 ptr[3] = endian_16hi8 (word);
245 inline uint_least32_t endian_big32 (
const uint8_t ptr[4])
247 return endian_32 (ptr[0], ptr[1], ptr[2], ptr[3]);
251 inline void endian_big32 (uint8_t ptr[4], uint_least32_t dword)
253 uint_least16_t word = 0;
254 word = endian_32hi16 (dword);
255 ptr[1] = endian_16lo8 (word);
256 ptr[0] = endian_16hi8 (word);
257 ptr[2] = endian_32hi8 (dword);
258 ptr[3] = endian_32lo8 (dword);
261 #endif // SIDENDIAN_H