3 回答

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊
在寫一個(gè)檢驗(yàn)儀器的串口指令發(fā)送,需要對(duì)發(fā)送數(shù)據(jù) Checksum ,儀器發(fā)給電腦的接收數(shù)據(jù),儀器已經(jīng) Checksum 了。如下原始數(shù)據(jù)
5C|1|I|In Check Range|I
FD (上一行的 Checksum 值)
7C|1|I|In Check Range|I
FF (上一行的 Checksum 值)
0R|4|^^^HBs^^^1^RLU|8982|||H|N|R||||20161229094052|IRL55791525
E1 (上一行的 Checksum 值)
1C|1|I|In Check Range|I
F9 (上一行的 Checksum 值)
2L|1|N
05 (上一行的 Checksum 值)
使用
0x04+0x00+0x38+0x00+0x01=0x3d= - 0x3C; // - 0x3d=3C;
也無(wú)法算對(duì),有明白的沒(méi)法給指點(diǎn)下。 另外對(duì)于串口的應(yīng)答方式有什么靈活辦法處理嗎? 我現(xiàn)在是 n=serial.inWaiting(),如果 n=1 ,判斷是 ACK 還是 ENQ 等,并做相應(yīng)的應(yīng)答寫死在程序里面。但是如果一段數(shù)據(jù)結(jié)尾有 ENQ 我該怎么處理,每次收到不為空數(shù)據(jù) data[-1:]判斷并進(jìn)行應(yīng)答?
0x04+0x00+0x38+0x00+0x01
我算出結(jié)果是 61

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊
python輸入的內(nèi)容在內(nèi)部全部為字符串,所以要判斷這個(gè)字符串是否為一個(gè)數(shù)字。大多法內(nèi)部函數(shù)并不能對(duì)各種形式的數(shù)據(jù)做出正確判斷,例如isdigit()函數(shù)只能判斷字符串是否為純數(shù)據(jù)組成對(duì)于負(fù)數(shù)則無(wú)效了。所以可以使用float()來(lái)檢測(cè),對(duì)各種數(shù)字的表示方法都有效果。
方法代碼:
#定義函數(shù)
def isnub(s):
try:
nb = float(s) #將字符串轉(zhuǎn)換成數(shù)字成功則返回True
return True
except ValueError as e:
return False #如果出現(xiàn)異常則返回False
#測(cè)試
print(isnub('123'))
print(isnub('abc'))
print(isnub('123.123'))
print(isnub('-123.123'))
print(isnub('-1.609E-19'))
測(cè)試結(jié)果如下:
True
False
True
True
True

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊
1234567891011121314151617181920212223 | import re def findit(matchstr,searchstr): Li = [] #找到的匹配字串置于Li列表中 rs = re.search(matchstr,searchstr) while rs! = None : Li = Li + list (rs.groups()) searchstr = searchstr[rs.span()[ 1 ]:] rs = re.search(matchstr,searchstr) return Li def main(): matchstr = r '(\d{16})' #正則表達(dá)式 匹配16個(gè)數(shù)字 #以下是要查找字串的例子 searchstr = '2018060512345678hekoedfk2018070612345678fifjr1234567890123456dfsdf' #在字串searchstr中找到的匹配數(shù)字都在rs這個(gè)list中 rs = findit(matchstr,searchstr) for x in rs: print (x) #mystri='/'.join(rs) #生成以/分隔的數(shù)字串 #print(mystri) #輸出以/分隔的數(shù)字串 main() |
添加回答
舉報(bào)