在 C++ 中将结构体转换为 int

2024-01-11

我有一个结构来表示 29 位 CAN 标识符,其位字段如下。

struct canId
{
    u8 priority         :3; 
    u8 reserved         :1; 
    u8 dataPage         :1;     
    u8 pduFormat        :8;     
    u8 pduSpecific      :8;     
    u8 sourceAddress    :8;     
} iD;

在我的代码中,我想将此结构复制到整数变量。就像是:

int newId = iD; 

不过我不确定这是否正确。有人可以评论一下吗?

编辑:我可以在每个字段上使用移位运算符,然后使用按位或将它们放在正确的位置。但这首先使得使用具有位字段的结构毫无用处。


对于真正的可移植解决方案,您不应该使用位域结构at all,因为字段布局未定义。相反,请使用整数和显式按位算术。

但对于更轻松的解决方案,int 与位域结构的联合就足够了。

为了兼顾安全性和便利性,您还可以考虑集成一个测试功能,一次切换一个字段并检查与所需整数的匹配。


union
{
    uint32_t packed;

    struct canId
    {
        u8 priority         :3; 
        u8 reserved         :1; 
        u8 dataPage         :1;     
        u8 pduFormat        :8;     
        u8 pduSpecific      :8;     
        u8 sourceAddress    :8;     
    } split;
} iD;

iD.packed= 0; iD.split.priority= 7; if (iD.packed != 0x7) ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C++ 中将结构体转换为 int 的相关文章

随机推荐

  • 更新 redux 存储中的嵌套数据

    使用 redux 更新存储中的嵌套数据数组的最佳 正确方法是什么 我的商店是这样的 items 1 id 1 key value links id 10001 data some more stuff 我有一对异步操作来更新完整的items
  • 使用图表系列中的参数值在 SSRS 2008 中进行钻取报告?

    我正在为我的公司创建一个仪表板系统 它由 Excel 图表和仪表报告组成 这些报告是用报告服务 2008 我有一个饼图 其中包含前 5 个最佳产品以及分配给每个产品的受保方数量 我想通过单击图表的系列区域 产品描述 来增强这一点 并希望它打
  • Golang:递归数据结构

    我有一个简单的问题 我正在尝试用切片在 Golang 中重现这个递归数据结构 type Trie map byte Trie 现在 我有一些使用下面的递归数据结构和切片的 粗略 源代码 一切正常 除了我的类型结构是一个结构而不是结构切片 理
  • STL 映射与向量的迭代器访问性能?

    使用迭代器循环 STL 映射与使用向量之间的性能差异是什么 我想使用映射键进行插入 删除和一些访问 但我还需要定期访问every地图中的元素 对于映射和向量 迭代整个集合的时间复杂度为 O N 然而 就像列表与向量一样 向量连续存储元素 因
  • DataFrame 中不能有调用集合操作的地图类型列

    org apache spark sql AnalysisException 在调用集合操作 相交 例外等 的DataFrame中不能有映射类型列 但列map col的类型是map 我有一个配置单元表 其中有一列 MAP
  • 元素以任意顺序出现任意次数的 xml 架构构造

    我想编写一个 xml 模式 它可以接受一些可以以任何顺序出现任意次数的元素 就像下面的例子一样 它应该满足所有相似的组合 请帮助我并提前致谢 实施例1
  • WPF DataGrid - 添加新行时如何保持关注 DataGrid 的底部?

    我在用DataGrid http msdn microsoft com en us library system windows controls datagrid VS 95 aspx来自WPF工具包 http www codeplex
  • 尝试使用没有过滤器的广播接收器

    IntentFilter intentFilter new IntentFilter test registerReceiver mReceiver intentFilter 我想要没有过滤器registerReceiver mReceiv
  • 如何防止 Apache httpd (MAMP) 中的 http 文件缓存

    我正在 MAMP 中开发一个单页 Javascript 应用程序 我的 JavaScript 和 HTML 模板文件在请求之间被缓存 有没有一种简单的方法可以在 MAMP 中指示我想要阻止 http 文件缓存 可能与一个 htaccess文
  • Laravel Eloquent 在连接表上的位置

    我在 laravel 5 Eloquent 中有两个实体 Foo 和 FooType 具有 oneToMany 关系 class Foo public function fooTypes return this gt hasMany App
  • WooCommerce API 在媒体中创建图像,即使它们存在

    可能是什么原因 尝试通过 REST API 批量更新 WooCommerce 中的产品图像 和价格 图片已存在于 WordPress 媒体库中 并且链接已正确复制 然而 它不是使用图像而是创建新图像 请求 邮寄 网址 Body update
  • 如何将装饰器中的变量传递给装饰函数中的函数参数?

    我正在学习Python 希望有人指出我正确的方法 这就是我想要在下面做的事情 def decorate function def wrap function args kwargs str Hello This is what I want
  • 通过 Tap 将 SQLite 数据库推送到 Heroku?

    所以我试图将 SQLite3 数据库推送到 Heroku 我认为这曾经是可能的 但是阅读here https devcenter heroku com articles heroku postgresql pg push and pg pu
  • Firebase、IN 子句查询和数据列表

    在我看来 当有人必须处理数据库时 这是一个非常明显的问题 所以我不知道为什么我找不到任何有关它的信息 我正在尝试设计非关系数据库对于我的项目 我有一个由一些信息 例如代码 图像和多语言描述 描述的产品列表 它们以不同的方式分类 这是结构的快
  • Python 的图标重叠问题

    我在这个论坛上找到了一些关于如何使用 Python 2 7 和 win32com 包实现图标覆盖处理程序的示例和主题 但它对我不起作用 我不明白为什么 我创建了DLL 注册时没有错误 我也尝试过直接使用脚本 但结果是一样的 就像这个班级从未
  • 内部生成器:无法运行程序“g++”:系统找不到指定的文件

    Internal Builder is used for build g ot1 o t1 cpp Internal Builder Cannot run program g The system cannot find the file
  • :: 在 AngularJS 中是什么意思

    我见过这样的语法 a href some other thing a 那个双冒号是做什么用的 如果将其删除会发生什么 用于一次性绑定 一旦稳定 即第一次消化后 表达式将停止重新计算 所以任何更新something将不可见
  • 将 csv 从云存储导入到云 sql 时服务帐户访问被拒绝(权限问题?)

    我正在尝试使用云存储中的 csv 填充 mysql 数据库 我正在使用API浏览器 https cloud google com sql docs mysql admin api v1beta4 instances import examp
  • 循环 DOMDocument

    我正在遵循这个问题 Robust 的建议 成熟的 PHP HTML 解析器 https stackoverflow com questions 292926 robust mature html parser for php 321963
  • 在 C++ 中将结构体转换为 int

    我有一个结构来表示 29 位 CAN 标识符 其位字段如下 struct canId u8 priority 3 u8 reserved 1 u8 dataPage 1 u8 pduFormat 8 u8 pduSpecific 8 u8