gpt4 book ai didi

c++ - 我可以通过它的字节指定一个整数常量吗?

转载 作者:IT老高 更新时间:2023-10-28 22:08:43 24 4
gpt4 key购买 nike

我在我的一个项目中使用 C++11,想知道如何最好地表示 ELF 魔数(Magic Number)。我不喜欢十六进制文字,所以我在寻找比以下更好的东西:

const uint32 ELF_MAGIC_NUMBER = 0x7F454c46; // 0x7F, E, L, F

所以,我试着写:

const uint32 ELF_MAGIC_NUMBER = { 0x7F, 'E', 'L', 'F' };

但是编译器提示初始化器列表中的项目太多,这可以理解,虽然很烦人。

有什么方法可以根据字节来编写整数文字吗?我觉得第一个选项虽然有效,但第二个选项不那么可读。

最佳答案

既然你买得起 C++11,你可以定义一个小的 constexpr 帮助器,它可以启用编译时评估:

#include <cstdint>

constexpr std::uint32_t from_bytes(char b1, char b2, char b3, char b4)
{
return b4 +
(static_cast<std::uint32_t>(b3) << 8) +
(static_cast<std::uint32_t>(b2) << 16) +
(static_cast<std::uint32_t>(b1) << 24);
}

这样,您的代码看起来与原始版本没有太大区别:

const std::uint32_t ELF_MAGIC_NUMBER = from_bytes(0x7F, 'E', 'L', 'F');

int main()
{
static_assert(ELF_MAGIC_NUMBER == 0x7F454c46, "!");
}

这里是 live example .

关于c++ - 我可以通过它的字节指定一个整数常量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20809347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com