有没有更简单的方法从字符串格式的十六进制值中提取某些位?

时间:2018-03-11 01:15:08

标签: c hex bit-manipulation c-strings bitmask

我觉得我方式过度思考这个并且必须有一个更简单的方法。

假设我有一个十六进制格式的字符串,例如:

“0x1fffff51”

(二进制:0001 1111 1111 1111 1111 1111 0101 0001)

现在,根据我的一些信息,我需要提取前x个二进制位,然后是下一个y二进制位,然后是剩余的32-x-y二进制位。

假设x = 5,y = 7

所以我想要:

x = 10001 = 17

y = 1111010 = 122

z = 0001 1111 1111 1111 1111 = 131071

我想要接近它的方式是:

  1. 使用strtoul()
  2. 将字符串转换为小数
  3. 使用mask = 2 ^ x - 1动态创建一个新的掩码(全1,x长度的长度) 3按位和MASK以及十进制值(存储为X)
  4. 使用mask = 2 ^ y - 1
  5. 动态创建新遮罩
  6. 将十进制数x位向右移动
  7. 按位和MASK以及小数值(存储为Y)
  8. 将十进制数y位向右移动,存储为Z
  9. 我几乎100%正向位移对十进制数有效,所以我认为这不会有问题。

0 个答案:

没有答案