C++ 更清晰地将变量分配到无符号字符数组的当前索引
前四个变量是值为C++ 更清晰地将变量分配到无符号字符数组的当前索引,c++,C++,前四个变量是值为0或1的unsigned char messageType是unsigned char,例如:48 我想知道是否有某种方法可以使代码更清晰 我尽量不使用任何图书馆 std::vector<unsigned char> packet(2); packet.at(0) |= (retain) << 0; packet.at(0) |= (qosLevel >> 0) << 1; packet.at(0) |= (qosLevel &g
0
或1
的unsigned char
messageType
是unsigned char
,例如:48
我想知道是否有某种方法可以使代码更清晰
我尽量不使用任何图书馆
std::vector<unsigned char> packet(2);
packet.at(0) |= (retain) << 0;
packet.at(0) |= (qosLevel >> 0) << 1;
packet.at(0) |= (qosLevel >> 1) << 2;
packet.at(0) |= (dupFlag) << 3;
packet.at(0) |= ((messageType >> 4) & 1) << 4;
packet.at(0) |= ((messageType >> 5) & 1) << 5;
packet.at(0) |= ((messageType >> 6) & 1) << 6;
packet.at(0) |= ((messageType >> 7) & 1) << 7;
std::向量包(2);
packet.at(0)|=(retain)>0)>1)4)&1)>5)&1)>6)&1)>7)&1)如果确定变量不包含任何额外位,则可以写入:
unsigned char packet[2] = { 0 };
packet[0] |= retain;
packet[0] |= qosLevel << 1;
packet[0] |= dupFlag << 3;
packet[0] |= messageType;
无符号字符包[2]={0};
数据包[0]|=保留;
packet[0]|=qosLevel如果确定变量不包含任何额外位,则可以写入:
unsigned char packet[2] = { 0 };
packet[0] |= retain;
packet[0] |= qosLevel << 1;
packet[0] |= dupFlag << 3;
packet[0] |= messageType;
无符号字符包[2]={0};
数据包[0]|=保留;
数据包[0]|=qosLevel可能是位字段?虽然IIRC在复制整个对象时会改变位字段的顺序,但这是实现定义的,因此,如果您计划通过网络序列化数据,IIRC将不起作用。std::bitset
matybeI很抱歉。我忘了说我不想使用任何图书馆。@JohnDoe甚至不想使用STL?我想您已经在使用它与std::vector
。因为对于纯无符号字符
,此代码将无法工作。我的意思是我只在必要的时候才使用图书馆。对不起,我误解了。也许是比特域?虽然IIRC在复制整个对象时会改变位字段的顺序,但这是实现定义的,因此,如果您计划通过网络序列化数据,IIRC将不起作用。std::bitset
matybeI很抱歉。我忘了说我不想使用任何图书馆。@JohnDoe甚至不想使用STL?我想您已经在使用它与std::vector
。因为对于纯无符号字符
,此代码将无法工作。我的意思是我只在必要的时候才使用图书馆。我很抱歉误会了。