gpt4 book ai didi

c - 交换整数中的交替字节

转载 作者:太空宇宙 更新时间:2023-11-04 08:10:28 25 4
gpt4 key购买 nike

问题:如下交换交替字节:

输入:uint8_t buf[4] = {0xab,0xcd,0xef,0xba};

输出:0xcdababef

我有下面的代码可以做到这一点,但我想知道是否有更好的方法来缩短代码。

#include <stdint.h>
#define SWAP_16(buf) (((buf & 0xFF00) >> 8) | ((buf & 0x00FF) << 8))
int main()
{
unsigned int value;
int i, j=0;
uint8_t buf[4] = {0,4,0,0};
unsigned int mask = 0xFFFF;
unsigned int tmp_value;
unsigned int size = 4;

for (i = size - 1 ;i >= 0; i--) {
tmp_value |= (buf[j] << 8*i);
j++;
}

value = SWAP_16((tmp_value & (mask << 16)) >> 16) << 16 |
SWAP_16(tmp_value & mask);
return 0;
}

最佳答案

假设 unsigned int 是 32 位的,您可以简单地使用:

value = ((value & 0xff00ff00) >> 8) | ((value & 0x00ff00ff) << 8);

交换中每对字节的字节。它与您的 SWAP_16() 宏类似,不同之处在于它同时执行值的两半。

关于c - 交换整数中的交替字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39929646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com