mik*_*ibi 3 c c++ serial-port visual-studio
假设我有以下数据结构(伪代码):
struct
{
uint8 id;
bool failure;
uint8 value;
}
Run Code Online (Sandbox Code Playgroud)
现在让我们说我希望以下列方式在内存中存储数据:
bit 7-6:id bit 5:失败位4-0:值
反正在C/C++/Visual Studio中有没有这样做?我知道你可以在Ada做到这一点,但这并不意味着什么.
编辑:抱歉不清楚,我确实需要内存中的特定布局.此结构将用于通过串行通道发送的消息,并且需要符合接口规范
您可以使用C位域:
struct
{
uint8 id : 2;
bool failure : 1;
uint8 value : 5;
};
Run Code Online (Sandbox Code Playgroud)
但是,尽管这可能会减少用于struct*的内存量,但这并不能保证任何特定的内存布局; 为每个字段分配的特定位将取决于您的编译器和/或平台ABI.如果需要将特定位索引分配给特定字段,则需要手动打包和解压缩.或者,如果您的代码不需要是可移植的,您可以查看编译器如何打包位域,并相应地对结构的成员进行排序.
* - C标准对位域布局的限制很少,而C++甚至更少.通常它会导致较少的内存使用,但如果编译器决定它将使用的最小位域分配单元是32位字段或其他东西,那么大小实际上可能会增加.见ISO/IEC 9899:1999(E)§6.7.2.1/ 10
| 归档时间: |
|
| 查看次数: |
201 次 |
| 最近记录: |