我需要交换一个 32 位值的字节 11223344 应该交换为 44332211。
目前我正在使用以下逻辑。
val = ((((val) & 0xff000000) >> 24)|
(((val) & 0x00ff0000) >> 8) |
(((val) & 0x0000ff00) << 8) |
(((val) & 0x000000ff) << 24));
这按预期工作。但我只是想知道是否有任何其他最快/优化的方法来做同样的事情。
如果htonl
和ntohl
函数可用并且适合您的需要,您可以考虑使用它。否则搜索各种方法,分析这些方法并选择最快的方法。例如,还可以尝试在 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);