在 C 中的字节序之间进行转换



我有一个值:

708877665544332211

正在创建一个辅助函数来帮助我输出:

0x1122334455667788

在我的助手中,我能够访问第一个值"8877665544332211"中的最后 8 个字节。如果有人能为我提供任何关于如何反转订单的指导,那将对我有很大帮助!谢谢!

在我的主函数中,要获得我的第一个数字:in.d = * ((uint64_t* )(&mem[cpu.pc + 1]));其中 d 是 typedef uint64_t addr_t,mem 是内存数组,cpu.pc 是程序计数器

这将读取从第二个字节开始的最后 8 个字节,因为总大小为 9 个字节,但操作码是第一个字节。

70 只是 Y86 指令的操作码。

在我的助手中,我可以访问 in.d,我正在尝试弄清楚如何在帮助程序中翻转它。

此函数将切换uint64_t中的字节顺序

uint64_t switch64(uint64_t i)
{
    uint64_t out = 
          ((i & (uint64_t)0xFF) << 56)
        | ((i & (uint64_t)0xFF00) << 40)
        | ((i & (uint64_t)0xFF0000) << 24)
        | ((i & (uint64_t)0xFF000000) << 8)
        | ((i & (uint64_t)0xFF00000000) >> 8)
        | ((i & (uint64_t)0xFF0000000000) >> 24)
        | ((i & (uint64_t)0xFF000000000000) >> 32) 
        | ((i & (uint64_t)0xFF00000000000000) >> 56);
    return out;
}

它可能可以通过更少的操作来完成,但是使用此代码可以清楚地了解发生了什么。

最新更新