小编dan*_*n13的帖子

std::byte 构造函数是否从整数中提取 LSB 或 MSB?

我正在努力理解以下代码行:

if constexpr (std::is_same_v<T, bool>)
{
    std::byte change = std::byte(static_cast<uint32_t>(in) << m_addr[1]);
    std::byte mask = ~std::byte(1u << m_addr[1]);
    dataBlock[m_addr[0]] = (dataBlock[m_addr[0]] & mask) | change;
}
Run Code Online (Sandbox Code Playgroud)

其中dataBlock是 a std::vector<std::byte>,T是in的类型,并且m_addr是 a std::array<std::byte, 2>。这会进行位移位以便将 bool 值存储在字节内。我的问题是关于声明中的第一行if。对于此示例,我将使用in = 1和m_addr[1] = 3。

根据我的理解,static_cast<uint32_t>(in)创建了一个uint32_t给定的00000000,00000000,00000000,00000001; 左移运算符将其转换为00000000,00000000,00000000,00001000,然后将其转换为std::byte。

如何std::byte选择存储的字节?我假设它存储 LSB,所以00001000,但我找不到任何参考资料来证实这一点。它可以存储MSB(所以00000000)吗?如果是,我怎样才能使下面的实现平台无关?

c++ c++17 std-byte

3
推荐指数
1
解决办法
121
查看次数

标签 统计

c++ ×1

c++17 ×1

std-byte ×1