对于我正在做的项目,“字”被定义为10位长度,根据我的程序所做的,我需要用二进制数来更新这个字中的特定位(当然是位的长度限制)。我的问题是,我不知道如何创建这些位,以及在那之后如何读取它们。
例如,"word“是这样设置的:
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表示其他东西。
我有点迷路了,不知道怎么做,如果有人能帮我,我会很高兴的。谢谢!
发布于 2017-09-04 17:27:52
只需将“字”建模为uint16_t,并设置适当的位即可。
如下所示:
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);
}..。诸若此类。
https://stackoverflow.com/questions/46033983
复制相似问题