c - 在 C 中交换 unsigned long(8 字节)内的字节

标签 c byte

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 从 例如:0x12345678deadbeef0x34127856addeefbe。我开始这样做,但现在陷入困境。请帮忙。

最佳答案

您可以在两个版本中使用 & 二进制 AND 屏蔽每隔一个字节。
然后以相反的方向移动两个掩码值,并使用 | 二进制 OR 将它们组合起来。

n =   ((n & 0xff00ff00ff00ff00ull)>>8ull)
    | ((n & 0x00ff00ff00ff00ffull)<<8ull);

如果它是 4 字节(我认为是 unsigned longunsigned long long 相比,但这是特定于实现的),那么代码是

n =   ((n & 0xff00ff00ul)>>8ul)
    | ((n & 0x00ff00fful)<<8ul);

关于c - 在 C 中交换 unsigned long(8 字节)内的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46134668/

相关文章:

C - 将一个字节的三位与一个字节组合

c - 对 SMC 调用的 Svc 处理程序

c - C/C++ 编译器是否跨编译单元进行优化?

c++ - 打印包含指定子字符串的所有字符串

C - 十六进制输出中缺少 0

byte - 简单的寻呼系统

database - 刷新数据库是什么意思?还有 "flash"

编译器设计 - 为具有多个操作数的表达式生成代码

C:仅打印 2 个数组中的不常见元素

java - 在 Java 中添加再见来创建新号码