Getting the size of an indiviual field from a c++ struct field(从 C++ struct 字段获取单个字段的大小)
问题描述
简短版本是:我如何了解 c++ 字段的单个字段的大小(以位为单位)?
The short version is: How do I learn the size (in bits) of an individual field of a c++ field?
为了澄清,我正在谈论的领域的一个例子:
To clarify, an example of the field I am talking about:
struct Test {
unsigned field1 : 4; // takes up 4 bits
unsigned field2 : 8; // 8 bits
unsigned field3 : 1; // 1 bit
unsigned field4 : 3; // 3 bits
unsigned field5 : 16; // 16 more to make it a 32 bit struct
int normal_member; // normal struct variable member, 4 bytes on my system
};
Test t;
t.field1 = 1;
t.field2 = 5;
// etc.
获取整个Test对象的大小很简单,我们就说
To get the size of the entire Test object is easy, we just say
sizeof(Test); // returns 8, for 8 bytes total size
我们可以通过获取一个普通的struct成员
We can get a normal struct member through
sizeof(((Test*)0)->normal_member); // returns 4 (on my system)
我想知道如何获取单个字段的大小,例如 Test::field4.普通结构成员的上述示例不起作用.有任何想法吗?或者有人知道它不能工作的原因吗?我相当相信 sizeof 不会有帮助,因为它只以字节为单位返回大小,但如果有人知道否则我会全神贯注.
I would like to know how to get the size of an individual field, say Test::field4. The above example for a normal struct member does not work. Any ideas? Or does someone know a reason why it cannot work? I am fairly convinced that sizeof will not be of help since it only returns size in bytes, but if anyone knows otherwise I'm all ears.
谢谢!
推荐答案
可以在运行时计算大小,fwiw,例如:
You can calculate the size at run time, fwiw, e.g.:
//instantiate
Test t;
//fill all bits in the field
t.field1 = ~0;
//extract to unsigned integer
unsigned int i = t.field1;
... TODO use contents of i to calculate the bit-width of the field ...
这篇关于从 C++ struct 字段获取单个字段的大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:从 C++ struct 字段获取单个字段的大小
基础教程推荐
- 如果我为无符号变量分配负值会发生什么? 2022-01-01
- 初始化列表*参数*评估顺序 2021-01-01
- CString 到 char* 2021-01-01
- GDB 显示调用堆栈上函数地址的当前编译二进制文 2022-09-05
- 通过引用传递 C++ 迭代器有什么问题? 2022-01-01
- 为什么派生模板类不能访问基模板类的标识符? 2021-01-01
- 为什么 typeid.name() 使用 GCC 返回奇怪的字符以及如 2022-09-16
- 我应该对 C++ 中的成员变量和函数参数使用相同的名称吗? 2021-01-01
- 为什么 RegOpenKeyEx() 在 Vista 64 位上返回错误代码 2021-01-01
- 非静态 const 成员,不能使用默认赋值运算符 2022-10-09
