TA 模块将数组转换为位域数组。通常用于通过网络传输数组和结构。
项目描述
位域数组
当您想通过网络传输/接收数组和结构等时,这种事情很有用。例如,您可以将数组[False, True, True, True, True, True, False]转换为数字 62,然后您可以使用按位运算符或使用此模块访问它。
class BitFieldArray
此类表示一个位域数组,每个位域包含一个值和要在数组中获取的最大位数。
参数:
*字段:一个元组
int。确定数组中的位分布。
方法:
def assign(self, values: typing.Iterable[int]):
def assign(self, value: int):
- 您可以使用此函数将位域分配到数组中。此函数可以接受将分配给第一个空位域的单个值,或将一个一个地分配给第一个空位域及更远的一系列值。
参数:
value:单个值或一系列值。
def delete(self, index):
- 从数组中删除一个位域。
参数:
index:
int,要删除的位域的索引。
def export(self):
- 将数组导出为整数,以后可以使用它来访问索引。您可以通过以下方式访问任何索引
(array >> SHIFT_RIGHT_X_BITS) & ((1 << BITS) - 1):
array = BitFieldArray(3, 7, 8, 9)
array.assign([5, 6, 7, 8])
number = array.export()
print((number >> 0) & ((1 << 3) -1)) # 5
print((number >> 3) & ((1 << 7) -1)) # 6
print((number >> 10) & ((1 << 8) -1)) # 7
print((number >> 18) & ((1 << 9) -1)) # 8
0 是我们第一次访问数组,我们不需要移位它。
然后我们将它移动 3 位,因为最后一个是 3 位。
然后我们将其移动 10 位,因为后者是 3+7 位,依此类推。
目标是移开我们需要的特定值之前的值,这样它将是我们需要访问的第一个值。您可以>>=每次都使用,然后您不需要像 3+7 那样对前一个值的位求和。
number = array.export()
for i in (3, 7, 8, 9): # bits in the structure
print(number & (1 << i) -1)
number >>= i
最终数字将是 0 - 消耗的数组。
def export_as_bytes(self, order):
- 将数组导出为字节。例如,通过网络发送。
参数:
order:字节的字节序。必须是“小”或“大”。您可以使用本机订单 -
sys.byteorder。
def to_list(self):
- 将数组作为数组中值的列表返回。
def from_int(self, value: int):
array.export()您可以创建一个指定位分布的数组实例,然后使用该数字调用此方法,而不是手动访问具有结果数的索引。
例如:
# 7 boolean flags, the first and last are True and the rest are False.
flags = BitFieldArray(1, 1, 1, 1, 1, 1, 1)
flags.from_int(62)
print(flags.to_list())
结果在[0, 1, 1, 1, 1, 1, 0].
参数:
value:
int,创建实例的编号。
def from_bytes(self, value: bytes, order: str):
- 与 BitFieldArray.from_int 相同,但用于字节。通常在通过网络发送数组时使用。
价值:
bytes。从中创建实例的字节。
order:
str,字节的字节序。必须是“小”或“大”。您可以使用本机顺序 - sys.byteorder。
例子
from BitFieldArray import BitFieldArray
array = BitFieldArray(1, 1, 1, 1)
array.assign(False)
array.assign(False)
array.assign([True, True])
print(array)
print(array.export())
将返回<BitFieldArray [00000000: 1, 00000000: 1, 00000001: 1, 00000001: 1]>,并且exporting 将返回 12。
from BitFieldArray import BitFieldArray
array = BitFieldArray(30, 16, 16, 2) # 64 bit array, 8 byte.
array.assign([999888777, 12345, 56789, 3])
print(array)
print(array.export())
它会打印出来
<BitFieldArray [00111011100110010001011110001001: 30, 0011000000111001: 16, 1101110111010101: 16, 00000011: 2]>,然后17831241924730230665。
数字 17831241924730230665 是数组本身,可以使用按位运算符访问,如方法中所述export。
它也可以与from_int.
from BitFieldArray import BitFieldArray
from sys import byteorder
array = BitFieldArray(10, 10, 10, 10, 12, 12, 12, 12) # 88 bit array
array.assign([550, 600, 650, 700, 1000, 2000, 3000, 4000])
print(array.export_as_bytes(byteorder))
将导致b'&b\xa9(\xaf\xe8\x03}\xb8\x0b\xfa'. 然后你可以做
from BitFieldArray import BitFieldArray
from sys import byteorder
array = BitFieldArray(10, 10, 10, 10, 12, 12, 12, 12) # 88 bit array
obj = array.from_bytes(b'&b\xa9(\xaf\xe8\x03}\xb8\x0b\xfa', byteorder)
print(obj)
print(obj.to_list())
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
内置分布
BitFieldArray -1.0.3.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 301fc9055e63da2c0cb0b1596ed99e5644e267d32016b0b22219cd31b62d4280 |
|
| MD5 | d472aa62f9f4d78c0660e6fd29b7a4e3 |
|
| 布莱克2-256 | 238a6f3f35b2b3f1ec0bd7a6f4ea71d7858a182b065c79dbad1ef6f7f9ff5516 |
BitFieldArray -1.0.3-py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | a029dd731ed88813e505c258f6f4068a28817bcbb96aa2af84eb2233e14f501d |
|
| MD5 | 375bb93577782bd128d9ce419934717c |
|
| 布莱克2-256 | 033b4eccf02b55a2a0ec48385c0fa3472a5057fb51f10542a549a4a1deee6ab7 |