如何在python中进行位操作时进行工作

时间:2017-02-25 07:41:28

标签: python bit-manipulation

python状态中位操作的文档

https://wiki.python.org/moin/BitManipulation

例如,以下代码

import ctypes
c_uint8 = ctypes.c_uint8

class Flags_bits( ctypes.LittleEndianStructure ):
    _fields_ = [
                ("logout",     c_uint8, 1 ),  # asByte & 1
                ("userswitch", c_uint8, 1 ),  # asByte & 2
                ("suspend",    c_uint8, 1 ),  # asByte & 4
                ("idle",       c_uint8, 1 ),  # asByte & 8
               ]

class Flags( ctypes.Union ):
    _anonymous_ = ("bit",)
    _fields_ = [
                ("bit",    Flags_bits ),
                ("asByte", c_uint8    )
               ]

flags = Flags()
flags.asByte = 0x2  # ->0010

print( "logout: %i"      % flags.bit.logout   )
# `bit` is defined as anonymous field, so its fields can also be accessed directly:
print( "logout: %i"      % flags.logout     )
print( "userswitch:  %i" % flags.userswitch )
print( "suspend   :  %i" % flags.suspend    )
print( "idle  : %i"      % flags.idle       )

所以我发现将值设置为asByte会导致将值解析为c_uint8,但我无法理解其背后的逻辑。当我们设置asByte值时,python是否会从asByte值设置回来更新构成该类的各个组件的值。另外作为旁注,我无法找到asByte的文档。如果有人能指出我,那就太棒了。

0 个答案:

没有答案