在 C 程序中以编程方式检测字节顺序

新手上路,请多包涵

有没有一种程序化的方式来检测你是在大端还是小端架构上?我需要能够编写将在 Intel 或 PPC 系统上执行的代码并使用完全相同的代码(即,没有条件编译)。

原文由 Jay T 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 411
1 个回答

c++20 解决方案:

 constexpr bool compare(auto const c, auto const ...a) noexcept
{
  return [&]<auto ...I>(std::index_sequence<I...>) noexcept
    {
      return ((std::uint8_t(c >> 8 * I) == a) && ...);
    }(std::make_index_sequence<sizeof...(a)>());
}

static constexpr auto is_big_endian_v{
  compare(std::uint32_t(0x01234567), 0x01, 0x23, 0x45, 0x67)
};

static constexpr auto is_little_endian_v{
  compare(std::uint32_t(0x01234567), 0x67, 0x45, 0x23, 0x01)
};

static constexpr auto is_pdp_endian_v{
  compare(std::uint32_t(0x01234567), 0x23, 0x01, 0x67, 0x45)
};

该任务可以 更轻松地 完成,但由于某种原因, <bit> 头文件并不总是存在。这是一个 演示

原文由 user1095108 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题