如何获取结构体中任意成员的位位置

2024-05-19

如何获取结构体中任意成员的位位置?

在示例中>

typedef struct BitExamStruct_
{
    unsigned int v1: 3;
    unsigned int v2: 4;
    unsigned int v3: 5;
    unsigned int v4: 6;
} BitExamStruct;

是否有任何宏可以获取任何成员的位位置,例如 GetBitPos(v2, BitExamStruct)?

我认为编译器可能根据结构中的位长度知道成员的位置。所以我想知道是否可以仅使用一个简单的宏而不运行代码来获得它。

先感谢您。


据我所知,没有标准方法可以做到这一点,但这并不意味着您找不到解决方案。

下面的代码并不是最漂亮的;这是一种识别变量在内存中“开始”位置的技巧。请记住,根据字节顺序,以下内容可能会给出不同的结果:

#include <stdio.h>
#include <string.h>

typedef struct s_toto
{
  int a:2;
  int b:3;
  int c:3;    
} t_toto;

int
main()
{
  t_toto toto;
  unsigned char *c;
  int bytes;
  int bits;

  memset(&toto, 0, sizeof(t_toto));
  toto.c = 1;
  c = (unsigned char *)&toto;
  for (bytes = 0; bytes < (int)sizeof(t_toto); bytes++)
    {
      if (*c)
        break;
    }
  for (bits = 0; bits < 8; bits++)
    {
      if (*c & 0b10000000)
        break;
      *c = (*c << 1);
    }
  printf("position (bytes=%d, bits=%d): %d\n", bytes, bits, (bytes * 8) + bits);
  return 0;
}

我所做的是将整个结构初始化为 0,并将 1 设置为我想要定位的变量的值。结果是该结构中只有一位被设置为 1。然后我逐字节读取内存字节,直到找到一个不为零的值。一旦找到,我就可以查看它的位,直到找到已设置的位。

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

如何获取结构体中任意成员的位位置 的相关文章

随机推荐

  • C# ASP.NET MVC:视图中的单行 If 子句?

    我遇到了一个小问题 并且无法解决它 我的看法是这样的 Try or
  • 序列化和反序列化 HttpRequestMessage 对象

    有人有序列化 HttpRequestMessage 对象的经验吗 尝试使用 Json net 它部分有效 也就是说 JsonConvert DeserializeObject 由于 StringContent 构造问题而失败 无法找到用于类
  • Java 模 2**64 求逆

    给定一个奇数long x 我在找long y这样他们的乘积模2 64 即 使用正常的溢出算术 等于 1 为了明确我的意思 这可以在几千年内计算出来 for long y 1 y 2 if x y 1 return y 我知道可以使用扩展欧几
  • 收到警告“标头不能包含多个标头,检测到新行”

    我正在用 oops 进行编码 以便用 PHP 上传图像 但是提交图片后却出现警告 标题不能包含多个标题 检测到新行 下面是我的函数 它给出了错误 public function ft redirect query if REQUEST UR
  • Visual C++ 找不到“Windows 类型”,如 PVOID、DWORD、ULONG 等

    Windows 似乎无法找到任何这些类型 我完全不知道该怎么办 我在 MSDN 上找到的东西似乎表明它们是默认包含的 但它们在 Native 程序或 CLR 程序中不起作用 我收到的具体错误是
  • 选择框属性更改时未触发 Webkit Mutation Observer 回调

    我正在尝试监视选择框 或嵌套的option元素 与新的变异观察者 http updates html5rocks com 2012 02 Detect DOM changes with Mutation Observers功能 然而 只有
  • 在转到另一个活动之前需要 editText 字段

    我有验证editText 如果editText字段为空 它应该会失败验证并阻止用户转到另一个字段Activity 因为需要一个值 怎么做 我知道这是一个基本问题 但我不知道如何做到这一点 My code btninsert Button f
  • 在 React Native 中从父组件调用子函数

    我正在开发我的第一个 React Native 应用程序 我想要实现的是从父组件执行子函数 情况如下 Child export default class Child extends Component myfunct function c
  • 如何将一个变量的字符串分配给另一变量?

    这是我在这个网站上的第一个问题 如何将一个变量的字符串分配给另一变量 我在这里做错了什么 include
  • Vaadin 网格表:如何禁用排序功能并设置一列的颜色

    我在用着GridVaadin 中的表用于数据表示 为此 我试图弄清楚以下两个问题 1 如何禁用每列标题中的排序功能 2 如何设置表格中某一列的颜色Grid table 首先 我找到了Vaadin 文档 https vaadin com do
  • 使用 ng-table 角度计算列的总和

    我正在使用 Angular ng table 以表格形式绘制数值数据 我无法弄清楚如何在表末尾引入一行 该行显示每列所有值的总和 我可以在服务器端计算数据并将其呈现在用户界面中 但有没有办法在 ng table ng grid 中实现这一点
  • 在 grunt 中禁用 livereload (yeoman)

    当我运行 gruntserve 时 它 会自动在 index html 中注入以下代码 我不希望这种事发生 我该如何禁用它 我尝试了所有提到的选项here https stackoverflow com questions 12830159
  • Python 中的 grep 等价物是什么?

    假设我有一个文本文件 其中包含 我喜欢大象 这一行 如果我捕获所述文件并将其通过管道发送到 grep大象 我会得到整行 我喜欢大象 如何使用 re 在 Python 中实现此功能 我一直在尝试以下方法 test re search elep
  • 使用 React.js + Express.js 发送电子邮件

    我在 ES6 中使用 React js 构建了一个 Web 应用程序 我目前想要创建一个基本的 联系我们 页面并想要发送电子邮件 我是 React 新手 刚刚发现我实际上无法使用 React 本身发送电子邮件 我正在遵循教程nodemail
  • 如何在 django-rest 中处理 M2M 关系

    让我们从 django 文档中使用的有关 M2M 关系的模型开始 该模型使用 through 参数来指向将充当中介的模型 class Person models Model name models CharField max length
  • 标准标头上的 Visual Studio 2017 错误

    我刚刚升级到 Visual Studio 2017 Community Edition 但在加载标准头文件时遇到问题 我从各种头文件中收到 507 错误 以下是一些片段 一些错误 Severity Code Description Proj
  • 更新项目时,NUMBER_VALUE 无法转换为字符串

    我在 DynamoDB 上遇到了这个奇怪的问题 我似乎无法更新项目 这是我的命令 TableName UserTable Key UID S h4XJj3YRxZiF7TDcGkxAhc UpdateExpression SET numRa
  • 如何释放字符指针数组?

    我使用此方法将列表中的值转换为数组 以便在 execvp 系统调用中使用 char list2argarray struct shellvalue values int count char array char malloc count
  • 在新实例中打开 SAS 程序

    我正在尝试找出一种在单击时默认在增强编辑器的新实例中打开 SAS 程序的方法 问题是asked https stackoverflow com questions 4654876 open sas program in new window
  • 如何获取结构体中任意成员的位位置

    如何获取结构体中任意成员的位位置 在示例中 gt typedef struct BitExamStruct unsigned int v1 3 unsigned int v2 4 unsigned int v3 5 unsigned int