如何根据结构体中成员的地址获取整个结构体的首地址

这篇具有很好参考价值的文章主要介绍了如何根据结构体中成员的地址获取整个结构体的首地址。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

根据结构体成员地址,获取整个结构体的首地址,在Linux系统、鸿蒙lite os操作系统中是一个很重要的功能。

在Linux系统中是通过container_of宏函数实现的

container_of通过结构体内某个成员的地址和该成员的名字,以及结构体类型,找到该结构体变量的首地址。

在鸿蒙Lite os中是通过LOS_DL_LIST_ENTRY宏函数实现的

LOS_DL_LIST_ENTRY通过结构体内某个成员变量的地址和该成员的名字,以及数据结构体类型,找到该结构体变量的首地址。

思路

具体的实现其实就是我前面结构体与动态内存章节开始说的结构体数据对齐去寻找到首地址的。文章来源地址https://www.toymoban.com/news/detail-680145.html

  1. 计算偏移量;
  2. 根据已知的成员地址计算结构体变量的首地址。
/*
@((TempHumiSensor *)0)//将开始地址转换成结构体指针类型,告诉编译器使用结构体类型去解释从0开始的地址
@((TempHumiSensor *)0)->temp//有了结构体指针类型,就可以访问结构体成员了
@&((TempHumiSensor *)0)->temp//有了这个成员,就可以获取成员地址了
@(uint32_t)&((TempHumiSensor *)0)->temp//将获得的偏移量转换为数值,就是偏移量转换为数值4
*/
(uint32_t)&((TempHumiSensor *)0)->temp//获得了temp在TempHumiSensor结构体中的偏移量
/*
@((uint8_t *)(0x20000404)) - (uint32_t)&((TempHumiSensor *)0)->temp//uint8_t的步长是1字节, 
                                                                     所以这里的地址为    
                                                                     0x20000404 - 4 = 
                                                                     0x20000400
*/
(TempHumiSensor *)((uint8_t *)(0x20000404)) - (uint32_t)&((TempHumiSensor *)0)->temp
//将得到的首地址装置转换为TempHumiSensor *类型                                                                                                     

到了这里,关于如何根据结构体中成员的地址获取整个结构体的首地址的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 高德地图根据经纬度获取地址信息

    主要是使用高德里面 地理编码与逆地理编码 的 getAddress 这个方法, 根据逆向地理编码:将地理坐标(经纬度)转换成地址描述信息,对应为AMap.Geocoder的getAddress方法。 具体使用的代码为 最后看效果 这是传的经纬度与解析出来的地理位置 如果需要正向解析将地理位置变成经

    2024年02月11日
    浏览(39)
  • C++笔记之是否知道了一个数组首元素的地址就可以获取该整个数组?-合众新能源汽车面试官问题

    事前提要:前段时间去面一个公司,面试官说知道了一个数组首元素的地址,就可以获取该整个数组,我当时就困惑,不知道大小和长度,只知道地址怎么就能获取。但也没反驳面试官,面试也没通过。

    2024年02月12日
    浏览(28)
  • Java根据IP地址获取对应归属地

    最近,各大平台都新增了评论区显示发言者ip归属地的功能,例如哔哩哔哩,微博,知乎等等,下面,就来讲讲,Java 中是如何获取 IP 属地的 在Java中有多种获取IP地址的方式,就不一一介绍了,给出了一个最常用的IP地址获取方式,仅供参考,代码如下: 对这里出现的几个名词解释

    2023年04月24日
    浏览(34)
  • C语言如何计算结构体大小(结构体的内存对齐)

    结构体的内存对齐是有关结构体内容的很重要一个知识点,主要考察方式是计算结构体的字节大小。 当我们对计算结构体一无所知,我们不妨自己思索如何计算,是不是直接计算结构体成员变量占用内存的大小呢? 那我们先举个例子  观察发现结构体的大小计算跟我们想的

    2024年02月16日
    浏览(34)
  • 根据WebService接口地址获取接口定义文件(wsdl文件)

    目录 方法一:借助SoapUI生成 方法二:借助Visual Studio工具生成 根据webservice接口地址想生成wsdl文件,可以借助SoapUI生成 选中,右键,导出 以管理员身份运行命令行窗口,进入VS插件目录,使用svcutil.exe工具自动生成wsdl文件。 命令:cd C:Program Files (x86)Microsoft SDKsWindowsv7.0A

    2023年04月12日
    浏览(55)
  • 【java】如何获取整个文件夹的文件名称

    需求 有时候我们需要一个文件夹里的所有文件的名称我们只能截图,然后再使用微信提取出其中的文字,这样是比较麻烦的,今天给大家介绍使用java提取所有文件的名字,代码如下:

    2024年02月14日
    浏览(34)
  • java根据音频流或者音频的地址获取分贝的工具类

    工具类 测试类

    2024年02月06日
    浏览(34)
  • Java调用高德地图API根据详细地址获取经纬度

    访问高德开放平台https://lbs.amap.com/ 登录后,在控制台中创建一个应用,获取生成的应用key。这个key将用于访问高德地图API。   您可以使用Java中的 HttpURLConnection 或 HttpClient 等工具发送HTTP请求到高德地图API,并传递参数以获取经纬度信息。以下是一个使用 HttpURLConnection 的示例

    2024年02月05日
    浏览(40)
  • vue 中从后端获取到文件的 url 地址,前端根据 url 地址下载文件

    项目用的是 vben admin 框架,用的是 vue3 + TS 项目需求数据导出功能,前端需要实现文件下载功能 后端返回的是文件的 url 地址 (本项目中返回的是阿里云 oss 的文件地址) 从后端得到的是一个 url 地址,先通过 fetch api 请求这个 url 地址并转换成 blob 对象,通过 URL.createObjectUrl() 将 blo

    2024年02月06日
    浏览(32)
  • 百度开发者平台API地理编码,根据地址获取经纬度

    地理编码 | 百度地图API SDK (baidu.com) 原始csv 结果: 字段名称: 社区名称、经度、纬度、看下表吧。 地理编码 | 百度地图API SDK (baidu.com) 或者参考这篇博文: http://t.csdn.cn/AghZk

    2024年02月15日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包