我是python的新手,所以如果我问一个愚蠢的问题,请原谅我。在我的函数中,我为给定数量的字节生成一个随机字节数组,称为“ input_data”,然后逐字节添加一些位错误,并将结果存储在另一个名为“ output_data”的字节数组中。打印功能显示它完全按预期工作,但字节不同。但是如果以后再比较字节数组,它们似乎是相同的!
def simulate_ber(packet_length, ber, verbose=False):
# generate input data
input_data = bytearray(random.getrandbits(8) for _ in xrange(packet_length))
if(verbose):
print(binascii.hexlify(input_data)+" <-- simulated input vector")
output_data = input_data
#add bit errors
num_errors = 0
for byte in range(len(input_data)):
error_mask = 0
for bit in range(0,7,1):
if(random.uniform(0, 1)*100 < ber):
error_mask |= 1 << bit
num_errors += 1
output_data[byte] = input_data[byte] ^ error_mask
if(verbose):
print(binascii.hexlify(output_data)+" <-- output vector")
print("number of simulated bit errors: " + str(num_errors))
if(input_data == output_data):
print ("data identical")
number of packets: 1
bytes per packet: 16
simulated bit error rate: 5
start simulation...
0d3e896d61d50645e4e3fa648346091a <-- simulated input vector
0d3e896f61d51647e4e3fe648346001a <-- output vector
number of simulated bit errors: 6
data identical
错误在哪里?我确定问题出在我的耳朵之间。
提前感谢您的帮助!
答案 0 :(得分:1)
output_data = input_data
Python是参考语言。当您执行上述操作时,两个变量现在都指向内存中的同一对象。例如:
>>> y=['Hello']
>>> x=y
>>> x.append('World!')
>>> x
['Hello', 'World!']
>>> y
['Hello', 'World!']
将output_data
用作新的bytearray
,您应该会很好:
output_data = bytearray(input_data)