繁体   English   中英

std :: bitset是否可以便携?

[英]Is std::bitset bit-order portable?

C ++是否会对位排序做出任何说明? 我特别致力于协议数据包布局,我怀疑是否有一种可移植的方式来指定将某个数字写入第5,6,7位,其中第5位是“最重要的”。

我的问题:

  • 是0x01总是表示为第7位设置的字节?
  • bitset<8>().set(7).to_ulong()总是等于1?

从20.5 / 3(ISO / IEC 14882:2011)

当在类bitset的对象和某个整数类型的值之间进行转换时,位位置pos对应于位值1 << pos。

也就是说, bitset<8>().set(7).to_ulong()保证为(1 << 7) == 128

bitset不做序列化,所以你不需要(需要)知道。 使用序列化/反序列化。

是bitset <8>()。set(7).to_ulong()总是等于1

不,不在我的机器上(见下文)。

但是,我当然希望iostream运算符能够移植:

#include <bitset>
#include <sstream>
#include <iostream>

int main()
{
    std::bitset<8> bits;
    std::cout << bits.set(7).to_ulong() << std::endl;

    std::stringstream ss;
    ss << bits;

    std::cout << ss.rdbuf() << std::endl;

    std::bitset<8> cloned;
    ss >> cloned;
    std::cout << cloned.set(7).to_ulong() << std::endl;
    std::cout << cloned << std::endl;
}

打印

128
10000000
128
10000000

如果问题是在通过网络发送二进制对象时是否可以愉快地忽略平台的字节顺序,答案是你不能。 如果问题是在两个不同平台上编译的相同代码是否会产生相同的结果,那么答案是肯定的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM