首页 > 解决方案 > 需要帮助解包位值

问题描述

我需要一些帮助/指导来解压缩代表 Python 中的位的值。我正在解析 json 对象,并且有一个字段表示使用位值描述问题的标志数。

例如,值 24 表示第 3 位和第 4 位都已设置 (8 + 16 = 24),因此它具有 msg4 和 msg5。我知道我需要使用按位运算符,但我真的不明白如何将值解压缩成单独的位。

从我正在使用的 API 的文档中:

位 0 (1) - 示例 msg1

位 1 (2) - 示例 msg2

位 2 (4) - 示例 msg3

位 3 (8) - 示例 msg4

位 4 (16) - 示例 msg5

位 5 (32) - 示例 msg6

标签: pythonbit-manipulationbitwise-operators

解决方案


如果val是你的价值:

if val & (1 << 0):
  # msg1
elif val & (1 << 1):
  # msg2
elif val & (1 << 2):
  # msg3
and so on

如果你发现两个的显式幂比移位更清晰,你也可以写

if val & 1:
  # msg1
elif val & 2:
  # msg2
elif val & 4:
  # msg3
and so on

推荐阅读