Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python读取Wiegand删除零_Python_Raspberry Pi2_Rfid_Wiegand - Fatal编程技术网

Python读取Wiegand删除零

Python读取Wiegand删除零,python,raspberry-pi2,rfid,wiegand,Python,Raspberry Pi2,Rfid,Wiegand,这是我已经用过的树莓皮上的RFID wiegand阅读器的代码片段 def main(): set_procname("Wiegand Reader") global bits global timeout GPIO.add_event_detect(D0, GPIO.FALLING, callback=one) GPIO.add_event_detect(D1, GPIO.FALLING, callback=zero) GPIO.add_even

这是我已经用过的树莓皮上的RFID wiegand阅读器的代码片段

def main():
    set_procname("Wiegand Reader")
    global bits
    global timeout
    GPIO.add_event_detect(D0, GPIO.FALLING, callback=one)
    GPIO.add_event_detect(D1, GPIO.FALLING, callback=zero)
    GPIO.add_event_detect(S1, GPIO.FALLING, callback=unlockDoor)
    while 1:
        if bits:
            timeout = timeout -1
            time.sleep(0.001)
            if len(bits) > 1 and timeout == 0:
                #print "Binary:", int(str(bits),2)
                c1 = int(str(bits),2)
                result = ((~c1) >> 1) & 0x0FFFFFF;
                checkAccess(result, doorID)
        else:
            time.sleep(0.001)



    if __name__ == '__main__':
        main()
在一个普通的USB RFID读卡器上,我得到了000011994,这就是卡上打印的内容。但是这个代码读起来是119994。我试过多张牌。它总是把零放在前面

我甚至试过一张有零的卡片。0000120368,显示120368
我以为它去掉了前4个字符,但后来我尝试了一个只有3个零的遥控钥匙。0004876298,其读数为4876298。只删除前面的零。

如果前面的几位为零,Python将删除它们,这也适用于整数。比如说

>>> a = 0003
>>> a
3
>>> b = 0b0011
>>> bin(b)
0b11
据我所见,所有RFID都有10个数字。您可以制作一个简单的程序来添加这些数字,并将值存储为字符串:

def rfid_formatter(value):
    str_value = str(value)
    for s in range(10 - len(str_value)):
        str_value = "0" + str_value
    return str_value
您的测试用例:

print rfid_formatter(120368)
print "0000120368"
print rfid_formatter(4876298)
print "0004876298"

如果前面的几位为零,Python将删除它们,这也适用于整数。比如说

>>> a = 0003
>>> a
3
>>> b = 0b0011
>>> bin(b)
0b11
据我所见,所有RFID都有10个数字。您可以制作一个简单的程序来添加这些数字,并将值存储为字符串:

def rfid_formatter(value):
    str_value = str(value)
    for s in range(10 - len(str_value)):
        str_value = "0" + str_value
    return str_value
您的测试用例:

print rfid_formatter(120368)
print "0000120368"
print rfid_formatter(4876298)
print "0004876298"

如前所述,在二进制序列中以及使用
int()
将字符串显式转换为十进制时,前导零都会被删除

还没有提到的是,在Python2.x中,带前导零的整数被视为八进制值

>>> a = 0003
>>> a
3
>>> a = 000127
>>> a
87
由于这会引起混淆,因此在Python 3中删除了隐式八进制转换,数值中任何数量的前导零都会引发一个
语法错误

>>> a = 000127
  File "<stdin>", line 1
    a = 000127
             ^
SyntaxError: invalid token
>>> 

如前所述,在二进制序列中以及使用
int()
将字符串显式转换为十进制时,前导零都会被删除

还没有提到的是,在Python2.x中,带前导零的整数被视为八进制值

>>> a = 0003
>>> a
3
>>> a = 000127
>>> a
87
由于这会引起混淆,因此在Python 3中删除了隐式八进制转换,数值中任何数量的前导零都会引发一个
语法错误

>>> a = 000127
  File "<stdin>", line 1
    a = 000127
             ^
SyntaxError: invalid token
>>>