为了账号安全,请及时绑定邮箱和手机立即绑定

Python 的 Checksum 为什么结果是一长串数字而不是如下效果?

Python 的 Checksum 为什么结果是一长串数字而不是如下效果?

波斯汪 2019-04-12 11:07:09
Python 的 Checksum 为什么结果是一长串数字而不是如下效果
查看完整描述

3 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

在写一个检验仪器的串口指令发送,需要对发送数据 Checksum ,仪器发给电脑的接收数据,仪器已经 Checksum 了。如下原始数据
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;

也无法算对,有明白的没法给指点下。 另外对于串口的应答方式有什么灵活办法处理吗? 我现在是 n=serial.inWaiting(),如果 n=1 ,判断是 ACK 还是 ENQ 等,并做相应的应答写死在程序里面。但是如果一段数据结尾有 ENQ 我该怎么处理,每次收到不为空数据 data[-1:]判断并进行应答?
0x04+0x00+0x38+0x00+0x01
我算出结果是 61

 


查看完整回答
反对 回复 2019-04-16
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

python输入的内容在内部全部为字符串,所以要判断这个字符串是否为一个数字。大多法内部函数并不能对各种形式的数据做出正确判断,例如isdigit()函数只能判断字符串是否为纯数据组成对于负数则无效了。所以可以使用float()来检测,对各种数字的表示方法都有效果。

方法代码:
#定义函数

def isnub(s):
try:
nb = float(s) #将字符串转换成数字成功则返回True
return True
except ValueError as e:
return False #如果出现异常则返回False
#测试
print(isnub('123'))
print(isnub('abc'))
print(isnub('123.123'))
print(isnub('-123.123'))

print(isnub('-1.609E-19'))
测试结果如下:
True
False
True
True
True



查看完整回答
反对 回复 2019-04-16
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

1234567891011121314151617181920212223import redef 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})'    #正则表达式 匹配16个数字     #以下是要查找字串的例子     searchstr='2018060512345678hekoedfk2018070612345678fifjr1234567890123456dfsdf'    #在字串searchstr中找到的匹配数字都在rs这个list中    rs=findit(matchstr,searchstr)    for in rs:        print(x)    #mystri='/'.join(rs)  #生成以/分隔的数字串    #print(mystri)        #输出以/分隔的数字串 main()


查看完整回答
反对 回复 2019-04-16
  • 3 回答
  • 0 关注
  • 1181 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信