【问题标题】:How to store a struct member as big endian如何将结构成员存储为大端
【发布时间】:2015-01-07 07:23:49
【问题描述】:

我有一个struct,类似于:

typedef struct _pair_t{
    uint16_t    keylen;     // 2
    uint32_t    vallen;     // 4
} __attribute__((__packed__)) pair_t;

我将使用mmap 从文件中读取数据,因此我想将数字存储为大端序。

我需要做htobe16 / betoh16 还是有一些__attribute__ 可以为我做这件事?

【问题讨论】:

  • 旁注:您不应定义以_t 结尾的类型,以避免与内置编译器类型发生冲突。
  • @Sidenote - 我使用 hm_pair_t(我在所有 typedef 中都使用 _t 的任何地方都添加了 hm_)。我应该在我的代码中解决这个问题吗?这种命名有什么好的方法吗?
  • _ 开头的名称也被保留。
  • This answer 对此进行了一些讨论。我在 C 中使用了CamelCaseWithSuffix_T 约定,但不知道它是否最好。

标签: c struct int endianness uint32-t


【解决方案1】:

您需要使用 htobe16 或 htons 或类似的。大多数编译器无法将变量声明为具有不同的字节序。

我知道有一个(付费的、商业的)编译器有一个开关可以把整个程序变成“相反”的字节序,但这不是你想要的,我敢肯定你不想付钱吧。

【讨论】:

    猜你喜欢
    • 2021-06-04
    • 2010-10-25
    • 2015-01-09
    • 2012-03-16
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    相关资源
    最近更新 更多