Python 为什么在我打印deviceID时将其设置为空字符串?

Python 为什么在我打印deviceID时将其设置为空字符串?,python,binary,bitset,Python,Binary,Bitset,这件事快把我逼疯了: 我定义了这两个函数在字节和int resp之间进行转换。字节和位: def bytes2int(bytes) : return int(bytes.encode('hex'), 16) def bytes2bits(bytes) : # returns the bits as a 8-zerofilled string return ''.join('{0:08b}'.format(bytes2int(i)) for i in bytes) 这与预期的效果一样:

这件事快把我逼疯了:

我定义了这两个函数在字节和int resp之间进行转换。字节和位:

def bytes2int(bytes) : return int(bytes.encode('hex'), 16)

def bytes2bits(bytes) : # returns the bits as a 8-zerofilled string
    return ''.join('{0:08b}'.format(bytes2int(i)) for i in bytes)
这与预期的效果一样:

>>> bytes2bits('\x06')
'00000110'
现在我正在读取一个二进制文件(具有定义良好的数据结构)并打印出一些值,这也很有效。以下是一个例子:

从文件中读取字节的代码段:

dataItems = f.read(dataSize)
for i in range(10) : // now only the first 10 items
    dataItemBits = bytes2bits(dataItems[i*6:(i+1)*6]) // each item is 6 bytes long
    dataType = dataItemBits[:3]
    deviceID = dataItemBits[3:8]
    # and here printing out the strings...
    # ...
    print("   => data type: %8s" % (dataType))
    print("   => device ID: %8s" % (deviceID))
    # ...
使用此输出:

-----------------------
Item #9: 011000010000000000111110100101011111111111111111
    97   bits: 01100001
     0   bits: 00000000
    62   bits: 00111110
   149   bits: 10010101
   255   bits: 11111111
   255   bits: 11111111

 =>  data type:      011  // first 3 bits
 =>  device ID:    00001  // next 5 bits
我的问题是,我无法将“位字符串”转换为十进制数字;如果我试着打印这个

print int(deviceID, 2)
这给了我一个错误的答案

ValueError: invalid literal for int() with base 2: ''
虽然
deviceID
肯定是一个字符串(我以前使用它作为字符串并将其打印出来)
'00001'
,但它不是
'

我还用
\uu doc\uu
检查了
deviceID
dataType
,它们是字符串

这一个在控制台中运行良好:

>>> int('000010', 2)
2
>>> int('000110', 2)
6
这是怎么回事

更新:

这真的很奇怪:当我将它包装在try/except块中时,它会打印出正确的值

try :
    print int(pmtNumber, 2) // prints the correct value
except :
    print "ERROR!" // no exception, so this is never printed

有什么想法吗?

请注意,
ord()
将字节转换为整数的效率要高得多。错误消息告诉您出了什么问题:您正在传递一个空字符串。你的问题不应该是“为什么
int()
不能解析一个完美的二进制整数?”,因为
int()
显然可以做到这一点;它应该是“为什么在打印时
deviceID
设置为空字符串?”@MartijnPieters,我知道,但只在字符上,而不是字符串上。我想。编码对于字符串来说是可以的…@kindall是的,你是对的;)thanks@septi:啊,是的,在这种情况下,您确实希望使用
struct
模块。:-)