我需要交换32位值的字节11223344应交换为44332211。 目前我正在使用以下逻辑。
val = ((((val) & 0xff000000) >> 24)|
(((val) & 0x00ff0000) >> 8) |
(((val) & 0x0000ff00) << 8) |
(((val) & 0x000000ff) << 24));
这是按预期工作的。但我只是想知道是否还有其他最快/最优化的方法来做同样的事情。
答案 0 :(得分:0)
如果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);