【问题标题】:portability of htobe64 and endian.hhtobe64 和 endian.h 的可移植性
【发布时间】:2015-03-02 11:24:43
【问题描述】:

我需要将我在运行我的代码的任意机器上收到的 8 个字节按大端顺序排列。我相信我可以为此使用htobe64 函数,但我不确定它的可移植性——即endian.h 在编译我的代码时跨不同机器架构和操作系统的可用性。这是一种安全的(即便携的)使用方法还是使用其他方法更好?

【问题讨论】:

    标签: c


    【解决方案1】:

    请使用以下可移植的方法:

    #include <stdint.h>
    
    void write64be(unsigned char out[8], uint64_t in)
    {
        out[0] = in >> 56 & 0xff;
        out[1] = in >> 48 & 0xff;
        out[2] = in >> 40 & 0xff;
        out[3] = in >> 32 & 0xff;
        out[4] = in >> 24 & 0xff;
        out[5] = in >> 16 & 0xff;
        out[6] = in >>  8 & 0xff;
        out[7] = in >>  0 & 0xff;
    }
    

    【讨论】:

    • 好的,谢谢,这解决了我的问题;但是,如果我将来需要交换不同的字节序列怎么办?我最终会包括几个这样的功能吗?我想我的问题本质上是关于endian.h 本身的可移植性。
    • @user4416936 endian.h 不可移植,在数字变量中保留“字节序”数字通常是个坏主意。像上面的函数一样使用一堆函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    相关资源
    最近更新 更多