已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。
六年前就关门了。
此帖子已在20天前编辑并提交审核,未能重新打开帖子:
原始关闭原因未解决
Improve this question
我如何将下面的结构转换成c#?2类型后面的括号表示数组还是为每个值留出多少内存?
typedef struct Cake{
uint8 sysnulls_[2];
char Pie[21];
uint8 MuffinCount[10];
uint8 NumOfCookies[6];
} Cake;
2条答案
按热度按时间iszxjhcz1#
你的猜测不正确。
所有这些成员都是数组。
uint8 sysnulls_[2];
意味着sysnulls_
是2 ×uint8
的数组。同样,
char Pie[21];
意味着Pie
是21个char
的数组,依此类推。uint8
不是一个标准的C类型,它可能是一个无符号的8位整数,但是如果你想确定的话,你应该看看它是如何定义的。6l7fqoea2#
数组中元素的个数,而不是字节的个数。
2个int8 sysnulls_可通过以下方式访问:
在这个例子中,
sysnulls_
数组确实占用了2个字节的内存,这只是因为每个uint8占用了一个字节,所以区分元素数和字节数是很重要的。如果你有
每个
sysnulls_
元素将占用2个字节,并且分配给sysnulls_
阵列的总空间将是4个字节。此外,结构的大小NOT总是等于各部分的总和。这是因为大多数编译器会添加填充,以使每个元素在2、4或8字节边界上对齐。
如果编译器使用4字节对齐,那么在您的示例中,
sysnulls_
将位于偏移量0处。然后,将有2个字节的空间将Pie
放置在偏移量4处。这将使我们在pie的末尾找到偏移量25。编译器将再次添加另外3个字节的填充,以确保MuffinCount
从偏移量28处开始(7 x 4). NumOfCookies将从偏移量36处开始(在其前面有一个填充2),并且总结构大小将是44(向上舍入到最接近的4的倍数)。大多数编译器都有编译器选项来设置默认打包,还有编译指示来控制给定结构的打包。