我对python相对较新,我试图设计一个程序,它接受二进制数据的输入并将其转换为文本字符串。到目前为止,我有以下内容但仍然收到以下错误:TypeError: unsupported operand type(s) for &: 'str' and 'int'
任何人都可以看到我出错的地方吗?如果是这样,建议如何解决它?
a = int(input("please enter the binary you want to convert: "))
for str in a:
g = [~(chr(str)&~240)|(e&~240)]
f = 86
e = 231
d = bin(chr(str))
b = (str)
j=(b)
print(j)
答案 0 :(得分:0)
你所做的事情有很多错误;鉴于发布的代码中存在其他错误,我不确定您是如何得到您声称拥有的错误的。按顺序阅读功能:
str
,它会阻止您访问同名的内置变量。此外,该变量要么不是str
,要么导致TypeError
chr(str)
。for x in y:
;这也是TypeError
。chr(str)
返回长度为1的字符串。这不是&
的有效操作数类型,因此TypeError
。e
,因此它将是NameError
。g
。f
- 甚至是什么?e
已定义!bin(chr(str))
永远不会工作 - 再次,chr
返回一个字符串,bin
将一个数字作为参数。b = (str)
有效,但括号是多余的。j = (b)
相同,print(j)
也没有缩进到足以进入循环。a = input("please enter the text you want to hide: ")
for ch in a:
## b = (ch) # this still doesn't do anything!
c = ord(ch)
## d = bin(c) # and d is never used
## e = 231 # e is only used to calculate g
f = 86
## g = (((c&240) >> 4)|(e&240)) # which is also never used
h = (((c&15)|(f&240)))
j = bin(h)
print(j)
。目前尚不清楚你想要实现的目标。如果您提供了示例输入("二进制数据"?的格式)和输出(以及#34;文本字符串"您想获得吗?)以及您的实际代码和完全错误回溯这可能更容易。
根据评论中提供的信息,您似乎正在尝试撤消这些操作:
a == 'foo'
这会产生,例如(0b1010110
0b1011111
0b1011111
):
'0b1010110'
但是,要将输入int
转换为整数,您需要为>>> int('0b1010110', 2)
86
提供适当的基数:
data = input("please enter the binary you want to convert: ")
for j in data.split():
h = int(j, 2)
...
你不能迭代整数。我想你想要的东西:
'0b1010110 0b1011111 0b1011111'
输入将是例如h = int(input(...), 2)
,或者一次只做一次:
f
请注意,由于功能相反,您必须在尝试返回按位操作之前定义{{1}} 。