Если вы используете Visual C ++ , сделайте следующее: Вы включаете intrin.h и вызываете следующие функции:
Для 16-битных чисел:
unsigned short _byteswap_ushort(unsigned short value);
Для 32-битных чисел:
unsigned long _byteswap_ulong(unsigned long value);
Для 64-битных чисел:
unsigned __int64 _byteswap_uint64(unsigned __int64 value);
8-битные числа (символы) не нужно преобразовывать.
Кроме того, они определены только для беззнаковых значений, которые они работают и для целых чисел со знаком.
Для чисел с плавающей запятой и двойников это сложнее, чем с простыми целыми числами, поскольку они могут быть или не быть в порядке байтов хост-машин. Вы можете получать поплавки с прямым порядком байтов на машинах с прямым порядком байтов и наоборот.
Другие компиляторы также имеют аналогичные свойства.
В GCC например, вы можете напрямую позвонить:
int32_t __builtin_bswap32 (int32_t x)
int64_t __builtin_bswap64 (int64_t x)
(не нужно что-то включать). Afaik bits.h также объявляет ту же функцию не GCC-ориентированным способом.
16-битный своп, это всего лишь бит-поворот.
Вызов встроенных функций вместо того, чтобы использовать свои собственные, дает вам наилучшую производительность и плотность кода между прочим.