У меня есть следующий код:
from BitVector import BitVector
import struct
import ipaddress
def run_marker_function(marker):
bv = BitVector(size=16) # 16 0s
m(bv, "27.246.2.177", "255.255.255.0")
def m(bv, R, R1):
# converts ipaddr strings to binary
bitForm = bin(int(ipaddress.IPv4Address(R)))[2:]
bitForm1 = bin(int(ipaddress.IPv4Address(R1)))[2:]
# R2 helper fn is the interleaved output of the 32 bit IP addresses in binary form (R2 is 64 bits)
R2 = Interleaved(bitForm, bitForm1)
# splits R2 into list of 8 items, each 8 bits
frags = [R2[i:i+8] for i in range(0, len(R2), 8)]
o = 3
f = frags[o]
# bv[0:3] = 000 initially, I increment by o
offset = bv[0:3].int_val() + o
bv[0:3] = BitVector(intVal=offset, size=3)
# bv[8:16] = 00000000 initially, I want to replace with the 8 bits of f - DOESN'T WORK
frag = bv[8:16].int_val() + int(f,2)
bv[8:16] = BitVector(intVal=frag, size=len(bv[8:16]))
и я получаю следующую ошибку:
18 frag = bv[8:16].int_val() + int(f,2)
---> 19 bv[8:16] = BitVector(intVal=frag, size=len(bv[8:16]))
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/BitVector/BitVector.py in __init__(self, *args, **kwargs)
else:
if size < len(bitlist):
raise ValueError('''The value specified for size must be at least as large as for the smallest bit vector possible for intVal''')
ValueError: The value specified for size must be at least as large as for the smallest bit vector possible for intVal
Но я не понимаю, почему, поскольку я добавляю фактическую длину этого соединения bv. Кроме того, я делаю ту же методологию в
offset = bv[0:3].int_val() + o
bv[0:3] = BitVector(intVal=offset, size=3)
, который не выдает ошибку
EDIT
Подобный экземпляр той же ошибки:
dist = bv[3:8].int_val() + 1
bv[3:8] = BitVector(intVal=dist, size=1)
выдает ошибку
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/BitVector/BitVector.py in __setitem__(self, pos, item)
if ( (pos.stop - pos.start) != len(item) ):
raise ValueError('incompatible lengths for slice assignment 7')
for i in range( pos.start, pos.stop ):
self[i] = item[ i - pos.start ]
ValueError: incompatible lengths for slice assignment 7