首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从C中的多个值创建地址

从C中的多个值创建地址
EN

Stack Overflow用户
提问于 2020-04-01 22:40:13
回答 2查看 87关注 0票数 1

我试图通过组合我拥有的多个无符号int值,在C中创建32位地址。这些多个值很重要,需要全部存储在1 32位地址中。

例如:假设我有unsigned int outer = 25unsigned int inner = 984unsigned int offset = 3241。外部int在32位地址中有10位顶位,内部int在32位地址中有10位中间位,偏移量有其余12位来存储其编号。

它看起来应该是:

代码语言:javascript
复制
OUTER | INNER | OFFSET
  10      10      12    = 32 bit address

我知道,在这个例子中,外部和内部into可以存储0- 2^10-1的值,偏移量可以存储0- 2^12-1的值,但是对于这些值,我不知道如何根据它们在32位地址内的位数来分割它们,然后将所有信息伪造/合并到整个地址中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-01 23:18:13

请按@ Answer 3386109回答:

代码语言:javascript
复制
address = (outer << 22) | (inner << 12) | offset;
票数 1
EN

Stack Overflow用户

发布于 2020-04-01 23:12:44

不确定这是否符合你的目标,但如果你允许的话,你可以为这样的目标制定一个结构。

代码语言:javascript
复制
typedef struct {
  union {
    struct {
      unsigned int offset : 12;
      unsigned int outer : 10;
      unsigned int inner : 10;
    } bits;
    unsigned int address;
  }
} Address;

int main() {
  Address a;

  a.bits.offset = 3241;
  a.bits.inner = 25;
  a.bits.outer = 984;
  printf("outer: %u\ninner: %u\noffset: %u\naddress: %08x", a.bits.outer,
         a.bits.inner, a.bits.offset, a.address);
  return 0;
}

输出

代码语言:javascript
复制
outer: 984 
inner: 25     
offset: 3241   
address: 067d8ca9 

尽管这取决于特定体系结构和编译器的枚举和位字段的处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60981446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档