更新:我有一个代表位值的整数列表:
bits = [1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1]
len(bits) == 30
我的问题是如何添加随机位填充以使位的长度为32,以及如何删除填充?
同样,当我有20位的长度时,如何添加4位填充以使其变为24位,以及如何删除4位填充?
答案 0 :(得分:1)
这是提取到函数中的一种方法:
import random
def add_padding(seq, num_bits):
pad_size = num_bits - len(seq)
return [random.choice([0, 1]) for _ in range(pad_size)] + seq
bit = [1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1]
print(len(bit))
padded = add_padding(bit, 32)
print(len(padded)) # <-- now a 32 bits sequence
要删除填充,您将需要以某种方式记住添加到序列中的位数,并删除它们;也许切片:
unpadded = padded[num_bits_added:] # <-- restores the original sequence of bits
[编辑]::调整为最接近的字节数:
import random
def adjust_a_byte(seq):
if len(seq) % 8 == 0 and len(seq) > 0: # an empty sequence will return an 8 bit sequence (all padding)
pad_size = 0
else:
pad_size = 8 * (len(seq) // 8 + 1) - len(seq)
print('len(seq):', len(seq), 'len(seq) % 8:', len(seq) % 8, 'pad', pad_size)
return random.choices([0, 1], k=pad_size) + seq
bit = [1, 0, 1, 1, 1, 1, 1, 1]
print(len(bit))
padded = adjust_a_byte(bit)
print(len(padded)) # <-- now a multiple of 8 bits sequence