簡體   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