offset宏定义_vba left函数

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • quotename()函数 

    quotename()函数 请教quotename函数的理解,我已经看了很多帮助,储如以下示例 QUOTENAME(Transact-SQL)返回带有分隔符的Unicode字符串,分隔符的加入可使输入的字符串成为有效的MicrosoftSQLServer2005分隔标识符。Transact-SQL语法约定语法QUOTENAME(‘character_string'[,’q…

    2022年7月25日
    11
  • Vue3不支持Filters过滤器

    Vue3不支持Filters过滤器filters过滤器已从Vue3.0中删除,不再支持。2.x语法在2.x中,开发人员可以使用过滤器来处理常见的文本格式。<template><h1>BankAccountBalance</h1><p>{{accountBalance|currencyUSD}}</p></template><script>exportdefault{props:{a.

    2022年5月21日
    49
  • lefse分析

    lefse分析LEfSe(LDAEffectSize)分析,可以用于两个或多个分组之间的比较,从而找到组间有显著性差异的物种(即biomarker),分析步骤主要分为三步:Step1:利用Kruskal-Wallis秩和检验检测所有的特征物种,通过检测不同组间的物种丰度差异,获得显著性差异物种。Step2:再利用Wilcoxon秩和检验检测上步获得的显著性差异物种的所有亚种是否都趋同…

    2022年6月13日
    179
  • GBDT算法简介_gbdt算法原理

    GBDT算法简介_gbdt算法原理在网上看到一篇GBDT介绍非常好的文章,GBDT大概是非常好用又非常好用的算法之一了吧(哈哈两个好的意思不一样)        GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答

    2022年10月12日
    3
  • SecureCRT中文乱码解决方法(6)

    SecureCRT中文乱码解决方法(6)1、重新查看会话,是否中文显示正常2、依然无法正常显示中文,可能是由于Linux系统中默认的字符编码非UTF8所致用root用户登录。输入cat/etc/sysconfig/i18n如果安装系统为中文系统,则修改【LANG=“zh_CN.UTF-8”】如果安装系统为英文系统,则修改【LANG=“en_US.UTF-8”】保存文件。断开SSH,重新登录。就正常了下面是修改…

    2022年7月17日
    21
  • pccharm激活码[在线序列号]

    pccharm激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    74

发表回复

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

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