首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C-处理字符串的特定位/int

C-处理字符串的特定位/int
EN

Stack Overflow用户
提问于 2017-09-04 17:21:30
回答 1查看 119关注 0票数 0

对于我正在做的项目,“字”被定义为10位长度,根据我的程序所做的,我需要用二进制数来更新这个字中的特定位(当然是位的长度限制)。我的问题是,我不知道如何创建这些位,以及在那之后如何读取它们。

例如,"word“是这样设置的:

代码语言:javascript
复制
bits 0-1 - representing something A - can get values between 0-3.

bits 2-3 - representing something B - can get values between 0-3.

bits 4-5 - C - values 0-3.

bits 6-9 - D - values 0-15.

当我的程序运行时,我需要决定在每组位中填充什么。之后,当我的字完全满时,我需要分析结果,意思是遍历整个字,并从位0-1理解A表示的内容,从位2-3理解B表示的内容,依此类推。

另一个问题是,位数字9是最高有效位,这意味着该字从6-9到4-5到2-3到0-1填充,然后从9位打印到0,而不是作为常规数组。

我试着用位字段结构来做这件事,但问题是“字”总是10位长度,上面提到的细分只是“字”的一个例子。也可以是位0-1表示某些东西,而位2-9表示其他东西。

我有点迷路了,不知道怎么做,如果有人能帮我,我会很高兴的。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-09-04 17:27:52

只需将“字”建模为uint16_t,并设置适当的位即可。

如下所示:

代码语言:javascript
复制
typedef uint16_t word;

word word_set_A(word w, uint8_t a)
{
  w &= ~3;
  return w | (a & 3);
}

uint8_t word_get_A(word w)
{
  return w & 3;
}

word word_set_B(word w, uint8_t b)
{
  w &= ~0xc0;
  return w | ((b & 3) << 2);
}

..。诸若此类。

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

https://stackoverflow.com/questions/46033983

复制
相关文章

相似问题

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