unsigned long swap_bytes(unsigned long n) {
unsigned char bytes[8];
unsigned long temp;
bytes[0] = (n >> ??) & 0xff;
bytes[1] = (n >> ??) & 0xff;
// ...
}
我真的很困惑如何将 8 字节 unsigned long
从
例如:0x12345678deadbeef
到 0x34127856addeefbe
。我开始这样做,但现在陷入困境。请帮忙。
最佳答案
您可以在两个版本中使用 &
二进制 AND 屏蔽每隔一个字节。
然后以相反的方向移动两个掩码值,并使用 |
二进制 OR 将它们组合起来。
n = ((n & 0xff00ff00ff00ff00ull)>>8ull)
| ((n & 0x00ff00ff00ff00ffull)<<8ull);
如果它是 4 字节(我认为是 unsigned long
与 unsigned long long
相比,但这是特定于实现的),那么代码是
n = ((n & 0xff00ff00ul)>>8ul)
| ((n & 0x00ff00fful)<<8ul);
关于c - 在 C 中交换 unsigned long(8 字节)内的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46134668/