C++ 初始化包含其他结构C++;

C++ 初始化包含其他结构C++;,c++,struct,bit-manipulation,C++,Struct,Bit Manipulation,我有一个结构变量,如下所示。(我更改了变量名称,因此它们没有意义。)我在初始化myStruct1数组的位时遇到问题 我需要初始化myStruct1.id.lengthOfData例如40和numberOfBits.number=16。为了做到这一点,我试着使用memset等,但我不能正确地使用它。我如何才能做到这一点,而不是手动操作?提前谢谢 #define unsigned int INT32U typedef struct{ struct{ INT32U length

我有一个结构变量,如下所示。(我更改了变量名称,因此它们没有意义。)我在初始化myStruct1数组的位时遇到问题

我需要初始化
myStruct1.id.lengthOfData
例如40和
numberOfBits.number
=16。为了做到这一点,我试着使用memset等,但我不能正确地使用它。我如何才能做到这一点,而不是手动操作?提前谢谢

#define unsigned int INT32U
typedef struct{
    struct{
        INT32U lengthOfData  :16;                       
        INT32U command   :8;                                                            
        INT32U sendBack  :1;                                
        INT32U backTest  :1;                                        
        INT32U required :1;                 
        INT32U reserved  :5;                                        
        INT32U student_class_id ;                      
    }id;
    union{
        INT32U number;
        struct{
            INT32U firstFiveBits:5;                          
            INT32U secondFiveBits:5;                        
            INT32U thirdFiveBits :5;                                                                                                                                                    INT32U eightBits :8;                        
            INT32U secondEightBits :8;                              
            INT32U restOfit:1;                          
        }numberOfbits;
    }foo;
    union{
        INT32U numberTwo;
        struct{
            INT16U firstSteenBits:16;
            INT16U secondSteenBits  :16;
        }bits;      
    }myUnion;
}myStruct1;
编辑

这是我到目前为止所做的

myStruct1 *myPtr;
    myPtr = new myStruct1;


    memset((myPtr), 0, sizeof(*myPtr)); // to zeros for all bits of myStruct1
    memset((myPtr), 3,1); // to give 3 to lengthOfData.

因为您处理的是位字段,所以可以将它们作为普通结构字段使用并初始化

#include <iostream>
using namespace std;

#define INT32U unsigned int
#define INT16U unsigned short

typedef struct{
    struct{
        INT32U lengthOfData  :16;                       
        INT32U command   :8;                                                            
        INT32U sendBack  :1;                                
        INT32U backTest  :1;                                        
        INT32U required :1;                 
        INT32U reserved  :5;                                        
        INT32U student_class_id ;                      
    }id;
    union{
        INT32U number;
        struct{
            INT32U firstFiveBits:5;                          
            INT32U secondFiveBits:5;                        
            INT32U thirdFiveBits :5;                                                                                                                                                    INT32U eightBits :8;                        
            INT32U secondEightBits :8;                              
            INT32U restOfit:1;                          
        }numberOfbits;
    }foo;
    union{
        INT32U numberTwo;
        struct{
            INT16U firstSteenBits:16;
            INT16U secondSteenBits  :16;
        }bits;      
    }myUnion;
}myStruct1;

int main() {
    myStruct1 obj;
    obj.id.required = 1; // Make sure not to exceed the bit capacity
    obj.id.lengthOfData = 22; // Make sure not to exceed the bit capacity
    cout << obj.id.lengthOfData << endl;
    cout << obj.id.required << endl;
    obj.id.required = 0;
    cout << obj.id.required << endl;

    return 0;
}
#包括
使用名称空间std;
#定义INT32U无符号整数
#定义INT16U无符号短
类型定义结构{
结构{
INT32U长度数据:16;
INT32U命令:8;
INT32U发送回:1;
INT32U回测:1;
所需INT32U:1;
INT32U预留:5个;
INT32U学生\班级\ id;
}身份证;
联合{
INT32U编号;
结构{
INT32U前五位:5;
INT32U第二个五位:5;
INT32U第三位:5;INT32U第八位:8;
INT32U第二八位:8;
INT32U重新配置:1;
}位数;
}傅;
联合{
INT32U编号2;
结构{
INT16U firstSteenBits:16;
INT16U第二存储单元:16;
}比特;
}我的联盟;
}myStruct1;
int main(){
myStruct1-obj;
obj.id.required=1;//确保不超过位容量
obj.id.lengthOfData=22;//确保不超过位容量

你能把你尝试过的东西贴出来吗?另外:你可能想尝试一下按位操作,以及最简单的尝试out@MarcoA.我已经把它添加到我的question@MarcoA.我还用我上一个版本的code@Marco_A.谢谢你的回复,你说得对。例如,id是必需的(我问它是因为它只有一个位。)我可以用obj.id.required=1来初始化它吗?@Marco_a。你强调使用memset是错误的想法?(用粗体线?)@newbornToCS没有,但是如果您需要直接设置字段而不需要字节寻址,这种方法更简单、更实用。