offset宏定义_vba left函数

offset宏定义_vba left函数最近做某项目撸代码时用到了offsetof宏,第一次使用这个宏,项目结束后对其用法也略知一二,现分享如下。位于stddef.h中的offsetof()宏,是获得struct中某成员相对于struct首地址的偏移量,以byte为单位,用struct首地址加该偏移量获得该成员的实际地址时,要把struct首地址强制转换成以byte为计数单位,地址本身一般都是32位(与芯片架构有关),强制转换的计数单位…


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

最近做某项目撸代码时用到了offsetof宏,第一次使用这个宏,项目结束后对其用法也略知一二,现分享如下。

位于stddef.h中的offsetof()宏,是获得struct中某成员相对于struct首地址的偏移量,以byte为单位,用struct首地址加该偏移量获得该成员的实际地址时,要把struct首地址强制转换成以byte为计数单位,地址本身一般都是32位(与芯片架构有关),强制转换的计数单位不会影响地址本身,该计数单位是告诉程序,对地址做运算时,偏移量是以该计数单位为单位的。比如,此处偏移量是以byte为单位的,故将struct首地址强制转换成以byte为计数单位,若将struct首地址强制转换成以2byte为计数单位,则该首地址与偏移量做运算时,将一个偏移量认为是2byte长度,这就导致计算出的成员实际地址有误,甚至超出分配给变量的地址的范围,导致Data Abort Exception,当然,这只是导致Data AbortException的一类原因。

*(u16 *)((u16 *)((u8 *)&ScrPara+s32)+c8)=i8;

用一个成员的实际地址去计算另一成员的实际地址时也要注意对第一个成员实际地址的计数单位的强制转换,此处是根据成员的size来决定的,若所有成员的size都是byte,则强制转换为byte,若size都是2byte,则强制转换为2byte,以此类推。若各种size都有,则强制转换为byte,避免引起混乱。

*(u16 *)((u16 *)((u8*)&ScrPara+s32)+c8)=i8;

以上各种地址,操作其内放的值时也要对地址进行一次计强制转换,该强制转换是与其内放的值的size相同。注意此处我没用“计数单位”这四个字,因为此处的强制转换不再是计数单位,而是其内放的值的size。若此时强制转换为byte,而值的size大于1个byte,则首先访问低位的byte。

*(u16 *)((u16 *)((u8*)&ScrPara+s32)+c8)=i16;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/172091.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 精进Quartz—Quartz简单入门Demo(二)

    要学习Quartz框架,首先大概了解了Quartz的基本知识后,在通过简单的例子入门,一步一个脚印的走下去。 下面介绍Quartz入门的示例,由于Quartz的存储方式分为RAM和JDBC,分别对这两种进行简单的说明。并附上代码! 首先需要添加Quartz的Jar包 ,我使用的是quartz.2.2.1版本!

    2022年2月25日
  • python教程:用简单的Python编写Web应用程序

    python教程:用简单的Python编写Web应用程序python现在已经成为很多程序员关注的编程语言之一,很多程序员也都开始弄python编程,并且很多时候都会用自己的操作来选择,而现在不管是程序员还是少儿编程,都会有python这门课,今天就和大家分

    2022年7月6日
  • Golang洗牌算法「建议收藏」

    Golang洗牌算法「建议收藏」简介主要思路为每次随机挑选一个值,放在数组末尾。然后在n-1个元素的数组中再随机挑选一个值,放在数组末尾,以此类推。注意,一定要设置随机种子,否则每次返回的值是一样的。codefuncshuffle(nums[]int)[]int{ rand.Seed(time.Now().UTC().UnixNano()) fori:=len(nums);i>0;i–{…

    2022年9月21日
  • Vue 数组操作

    Vue 数组操作Vue 数组操作

    2022年4月23日
  • VMWare14 安装Mac OS系统(操作图解)

    VMWare14 安装Mac OS系统(操作图解)近日恰逢双十一,瞅了瞅自己干瘪的钱包,没忍心入手期待已久的macPro,只好在虚拟机里玩一下mac好了,等以后钱包傲气的时候再来个真实的。安装环境:windows10VMWare14.2VMwareWorkstationPro14已安装或自行安装Unlocker(链接:https://pan.baid…

    2022年6月2日
  • wxpython自定义控件_wxPython 教程(十三) 自定义控件

    wxpython自定义控件_wxPython 教程(十三) 自定义控件本节讲述wxPython自定义控件。GUIToolkits会提供多数常用的部件,比如按钮、文本控件、滚动条、滑块等等。wxPython也会提供很多控件,但若需要更定制化的控件还是需要开发者自己编写。自定义控件通过两种方式创建:一种是通过修改或增强现有控件,另一种是我们从零开始直接创建。超链接控件第一个例子是创建一个超链接控件,我们基于wx.lib.stattext.GenStatic…

    2022年5月11日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号