获取unsigned int内的位的整数值

时间:2017-06-20 11:04:08

标签: c

我想编写一个读取寄存器的内核模块,(返回值保存在unsigned int中),然后从该变量中读取16到22位,并将其转换为整数。转换没问题。但首先要解决这个问题就是问题所在。 例如,我有这两个十六进制值:

0x88290000d
0x005a0a00d

从这两个值我想要16到22位作为整数,任何想法如何在我的内核模块中实现它?

2 个答案:

答案 0 :(得分:2)

以下是提取16到22位(包括7位)的方法:

  1. 将注册号码读入unsigned int reg = ...
  2. reg向右移动16,因此位16位于最不重要的位置:reg >>= 16
  3. 使用0000000001111111 2 屏蔽该数字,即0x7F:reg &= 0x7F
  4. 注意:以上计数从零开始的位(传统的位编号方式)。

答案 1 :(得分:0)

您可以定义仅对7位(16位至22位)有效的掩码。所以你的面具将被定义为。

mask=0x007F0000   //Your mask
var2=0x00270f00   //Variable which you want to mask
result=mask & var2 // bitwise-and operation to mask the value
result>>=16       // right shift the value to get only this value.

希望这会有所帮助:)