【发布时间】:2020-09-25 13:49:44
【问题描述】:
我正在尝试在 PyCharm 中创建一个简单的 paritybit 方法,并且我已经编写了以下代码:
import bitarray as ba # Library with bit strings
data = ba.bitarray(endian = 'little') # String for data
data.frombytes('Secret message!'.encode()) # String for encoded EDC bits
def parity(bitarray):
print("Original:\t\t\t{}".format(bitarray))
#even = True # Two protocols agree on either even or odd
pbit = '0' # Initiate parity bit as 0
count = bitarray.count('1') # Count the number of ones
print("Counted {} 1's in bitarray".format(count))
if (count % 2) != 0:
pbit = '1' # If the bit array have an odd number of 1's we add parity bit 1 to make the number of 1's even
print("Parity bit is {}".format(pbit))
bitarray.append(pbit)
print("Parity bitarray: \t{}".format(bitarray))
return bitarray
parity(data)
我得到这个输出:
Original: bitarray('110010101010011011000110010011101010011000101110000001001011011010100110110011101100111010000110111001101010011010000100')
Counted 58 1's in bitarray
Parity bit is 0
Parity bitarray: bitarray('1100101010100110110001100100111010100110001011100000010010110110101001101100111011001110100001101110011010100110100001001')
如您所见,1 的数量是偶数,奇偶校验位是 0,但是我的代码在位数组的末尾添加了 1 而不是 0。我试图解决这个问题,但我还没找到解决办法。
【问题讨论】:
-
仍在弄清楚核心问题是什么,但第一个
if是多余的,并且从未使用过even -
无法重现。最初我得到
'str' object has no attribute 'append',所以您的示例代码不完整,但是在制作data一个列表后它可以工作,并且0被打印为“奇偶校验”,然后附加。将数据中的任何0更改为1(或反向)后,它也能正常工作。 -
我忘记包含我用作输入的对象类型。我现在已经编辑了示例代码。