C++对位序有什么规定吗?我正在研究协议数据包布局,我怀疑是否有一种可移植的方式来指定某个数字写入第5、6、7位,其中第5位是“最高有效位”。
我的问题:
我的问题:
- 0x01总是表示为设置了第7位的字节吗?
-
bitset<8>().set(7).to_ulong()
是否总是等于1?
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
bitset.set(7).to_ulong()
发送到另一个平台,并且 bitset(received).isset(7)
为 true
。 - xtoflstd::bitset
的? - deft_codehtonl/ntohl
转换;如果您只修改单个字节,则可以只发送该字节,那里没有字节序影响... - David Rodríguez - dribeas