交换 32 位值字节的最快(优化)方式

Fastest (Optimized) way to swap bytes of a 32 bit value

我需要交换一个 32 位值的字节 11223344 应该交换为 44332211。 目前我正在使用以下逻辑。

val = ((((val) & 0xff000000) >> 24)|
      (((val) & 0x00ff0000) >>  8) |
      (((val) & 0x0000ff00) <<  8) |
      (((val) & 0x000000ff) << 24));

这是按预期工作的。但我只是想知道是否还有其他 fastest/Optimized 方法可以做到这一点。

如果htonlntohl功能可用并且适合您的需要,您可以考虑使用它。否则搜索各种方法,分析这些方法并选择最快的方法。例如,也可以尝试在 gcc 中使用任何编译器提供的函数 __builtin_bswap32

一个示例取自 here,并进行了轻微修改。

register uint32_t value = number_to_be_reversed;
uint8_t lolo = (value >> 0) & 0xFF;
uint8_t lohi = (value >> 8) & 0xFF;
uint8_t hilo = (value >> 16) & 0xFF;
uint8_t hihi = (value >> 24) & 0xFF;

uint32_t value = (hihi << 24)
               | (hilo << 16)
               | (lohi << 8)
               | (lolo << 0);