13006.python小知识点

1 python 杂项

1.1 导入其他目录下头文件

project
   --> dir1
       --> dir2
           --> demo1.py
   --dir3
      --> demo2.py
# demo2.py 引用 demo1.py 定义的接口
# 子目录使用.进行连接
from dir1.dir2.demo1 import *

# 如果有pyQt5 可以参考 pyqt5 ui目录下调用文档关系.

1.2 数组操作

array[]  # 数组定义
array.append(temp_rpu)  # 数组赋值
array.append(temp_pl)
print("array[0]:", array[0]) #数组访问

1.3 字符串取字符操作

print str[:] #截取字符串的全部字符

print str[6:] #截取第七个字符到结尾

print str[:-3] #截取从头开始到倒数第三个字符之前

print str[2] #截取第三个字符

print str[-1] #截取倒数第一个字符

print str[::-1] #创造一个与原字符串顺序相反的字符串

print str[-3:-1] #截取倒数第三位与倒数第一位之前的字符

print str[-3:] #截取倒数第三位到结尾

print str[:-5:-3] #逆序截取

1.4 累加求和校验

# cmd_head = 0xAB or 0xBA
# pack_id: 0 ~ 65535 , pkg_len: cmd_type + ... + check_sum
# cmd_type=0x03
# para_type = 0x0
# para_data = '0102030405' 如果para_data为空 ,para_data=''
def pack_packet(cmd_head, pack_id, pkg_len, cmd_type, para_type, para_data):   
    para_data_len=len(para_data)
    sum=cmd_type+para_type+pkg_len
    for i in range(0, para_data_len):
        if( i%2 == 0):
            data=int(para_data[i:(i+2)], 16)
            sum += data
    sum &= 0xFFFF
    packet =int2bytes(cmd_head,1) + int2bytes(pack_id, 2) + int2bytes(pkg_len, 2) + int2bytes(cmd_type, 1) + int2bytes(para_type,1) +bytes.fromhex(para_data)+ int2bytes(sum, 2)
    return packet

# 收到Lidar发送的反馈包进行解包校验,判断是否正确.
# 反馈值:协议帧是否正确,应答错误码,0标识OK, 非0标识相应失败.
def unpack_ack_packet(buffer):
    print("unpack_ack_packet ")
    # b'\xAB\xAC+len(2) + ack_errno(1) + ack_data(n) + check_sum(2)'
    length=len(buffer)
    cmd_head = bytes2int(buffer[0:1])
    cmd_ack = bytes2int(buffer[1:2])
    data_len= bytes2int(buffer[2:4])
    ack_errno=bytes2int(buffer[4:5])  # ack_errno
    
    # print("buffer:", buffer[-2:], buffer[-4:-3], buffer[-6:-5])
    # print("", cmd_head, cmd_ack, data_len, ack_errno)
    
    ack_check=bytes2int(buffer[-2:])
    # print("ack_check:", ack_check)
    
    sum = data_len
    for i in range(2, data_len-1):
        if( i%2 == 0):
            sum +=bytes2int(buffer[i, i+1])
    sum &= 0xFFFF
    
    print("ack_check:", ack_check, " cal_sum:", sum)
    return (ack_check == sum), ack_errno
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guangshui516

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值