为什么我的字节数组没有不同,即使 print() 说它们不同?
Why are my byte arrays not different even though print() says they are?
我是 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
错误在哪里?我确定问题出在我的耳朵之间...
提前感谢您的帮助!
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)
我是 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
错误在哪里?我确定问题出在我的耳朵之间...
提前感谢您的帮助!
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)