为什么此代码段会导致:TypeError 'int' object is not subscriptable
?TypeError:'int'对象不可自订
return (bin(int(hexdata)[2:].zfill(16)))
hexdata
是一个十六进制字符串。例如,它可能是0x0101
。
为什么此代码段会导致:TypeError 'int' object is not subscriptable
?TypeError:'int'对象不可自订
return (bin(int(hexdata)[2:].zfill(16)))
hexdata
是一个十六进制字符串。例如,它可能是0x0101
。
你这样做:
>>> int('1234')[2:]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object has no attribute '__getitem__'
>>> 1234[2:]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object has no attribute '__getitem__'
如果您打算删除前两个字符,请使用下列内容:
>>> int('1234'[2:])
34
如果一部开拓创新的字符串是十六进制表示,你应该通过可选base
自变量16
>>> int('1234'[2:], 16)
52
如果使用[2:]
删除由bin
生成的0b
(不是从原始字符串中删除前导字符),那么以下是您想要的。
>>> int('0x1234', 16) # No need to remove leading `0x`
4660
>>> int('0x1234', 0) # automatically recognize the number's base using the prefix
4660
>>> int('1234', 16)
4660
>>> bin(int('1234', 16))
'0b1001000110100'
>>> bin(int('1234', 16))[2:]
'1001000110100'
>>> bin(int('1234', 16))[2:].zfill(16)
'0001001000110100'
顺便说一句,你可以使用str.format
或format
代替bin
+ str.zfill
:
>>> '{:016b}'.format(int('1234', 16))
'0001001000110100'
>>> format(int('1234', 16), '016b')
'0001001000110100'
UPDATE
如果指定0作为基础,int
会自动识别数的基础使用前缀。
>>> int('0x10', 0)
16
>>> int('10', 0)
10
>>> int('010', 0)
8
>>> int('0b10', 0)
2
括号在错误的地方。假设你有一个像“0x0101”的字符串,你想用一个16位二进制字符串结束:
bin(int(hexdata,16))[2:].zfill(16)
的int(X,16)
调用解释,作为一个十六进制数字(和可以接受一些形式0xSomething
的) 。然后bin(X)
将其转换为形式为0b01010101
的字符串。
然后[2:]
摆脱前面的0b
和zfill(16)
填充到16“比特”。
>>> bin(int("0x0102",16))[2:].zfill(16)
'0000000100000010'
应该将基数设置为16:'int(hexdata,16)' – zhangxaochen
它是十六进制的:“hexdata是一个十六进制字符串。 ,它可能是0x0101“ – user2357112
你正在申请[]为int(hexdata),它是整数 – Anycorn
所以你是在暗示斌(INT(hexdata [2:]))zfill(16))。? – cjwert
如果这是你的意图,那么是的。斌返回一个字符串,我假设你想填充?然而,如果我理解正确,hexdata是十六进制字符串?在这种情况下,你需要指定正确的基数,例如'int(“0xA”,16)' – Anycorn