当前位置: 首页 > news >正文

PyQt5实战——UTF-8编码器功能的实现(六)

个人博客:苏三有春的博客

系类往期文章:
PyQt5实战——多脚本集合包,前言与环境配置(一)
PyQt5实战——多脚本集合包,UI以及工程布局(二)
PyQt5实战——多脚本集合包,程序入口QMainWindow(三)
PyQt5实战——操作台打印重定向,主界面以及stacklayout使用(四)
PyQt5实战——UTF-8编码器UI页面设计以及按钮连接(五)

方法在工程中的位置

这一小节需要结合前面PyQt5实战——多脚本集合包,UI以及工程布局(二)的内容来看,在那一篇文章中,我们讲到,我们讲主界面,功能UI界面,以及实现功能本身的方法分别放在了不同的地方以方便我们维护,此方法属于功能的实现,因此与其它脚本功能一同放在了tools目录下,如果要调用该功能,则需要使用import导入模块。

请添加图片描述

代码解释

convertor模块中并没有类,只有一个方法,即convertor方法,它接受一个字符串参数,并将字符串进行编码,处理成UTF-8格式,输出十六进制数以及十六进制数的个数

def convertor(s):res = ''# 将字符串s编码为UTF-8格式的字节串strlen = len(s)for i in range(strlen):# 将字节串转换为十六进制表示,同时移除b''标记并替换\\x为0xhexstr = ''.join(f'{byte:02x}' for byte in s[i].encode("UTF-8"))hexstr = hexstr.upper()  # 可选:转换为大写# 添加空格使得输出更易于阅读hexstr_space = ', 0x'.join(hexstr[i:i + 2] for i in range(0, len(hexstr), 2))hexstr_space = '0x'+hexstr_spaceres = res + hexstr_space + ', 'res = res[:-2]print(res)return res,res.count('0x')

以下逐行解释代码:

  • 初始化res字符串变量,
  • 获取传入的参数s字符串的长度,并传给strlen
  • for循环遍历字符串中的每一个字符
  • s[i].encode("UTF-8")将字符编码为UTF-8字节串
  • for byte in ...是一个生成器表达式,它遍历编码后的字节串,每个byte表示UTF-8编码中的每一个字节
  • f'{byte:02x}'将每个字节转换为两位的十六进制字符串,0表示如果十六进制不足两位,则以0补足,2表示宽度位两位,x表示以十六进制格式输出,比如:如果byte的值为255,则会生成’ff’,如果byte的值为7,则会生成’07’
  • ''.join(...)join方法将生成器表达式的所有结果连成一个字符串,即格式化操作,例如:一个字符编码为b'\xe4\xb8\xad',经过格式化后将变成'e4b8ad'
  • upper方法将输出的字符串中所有小写转换成大写
  • 又一个join方法,将hexstr一个字符一个字符拆开,每个两个字符中间便加入, 0x,经过上一个join方法,这次经过格式化操作后,e4b8ad将会变成E4, 0xB8, 0xAD, 0x
  • 在字符串最前面加上0x,变成:0xE4, 0xB8, 0xAD, 0x
  • 删除最后3个字符(-1是最后一个,-2是倒数第二个,但是[]读内容的规则:前面读,后面不读,也就是虽然是最后一位是倒数第二,但实际上倒数第二不读,只读到倒数第三)
  • 打印res结果
  • 返回结果以及0x的计数(通过计算0x来计算有多少个十六进制数)

本文要点

  • 本文中展示了,方法在工程中的位置,以及如何在工作区UI对象中导入该模块
  • 详细解释了convertor方法如何实现字符串转UTF-8格式
  • 其中有许多用法值得我们详细学习,比如join方法的使用,f'{byte:02x}'将每个字节转换成十六进制数,upper方法的使用,[]的读取范围的规则等

http://www.mrgr.cn/news/65717.html

相关文章:

  • 计算机毕业设计——ssm基于java智能选课系统的设计与实现演示录像2021
  • 电能表预付费系统-标准传输规范(STS)(33)
  • 【位域打包CAN报文】通过位域打包CAN报文的数据,实现精确控制每个(CAN信号)字段
  • TCP三次握手,四次挥手,以及11种状态详解
  • 【数据结构】树-二叉树(链式)
  • 随机生成100组N个数并对比,C++,python,matlab,pair,std::piecewise_construct
  • 【018B】基于51单片机脉搏温度计
  • .Net Core Configuration用法
  • antdesignpro表单中高级的fieldProps属性
  • 【面试经典150】day 11
  • javaNIO核心知识.中
  • P11118 [ROI 2024 Day 2] 无人机比赛 题解
  • Python装饰器执行的顺序你知道吗
  • 并发编程(6)——future、promise、async,线程池
  • 写给粉丝们的信
  • 使用 MySQL Workbench 创建和管理用户
  • 六款高颜值注册页面(可复制源码)
  • 数据仓库设计-分层
  • 【数学二】线性代数-矩阵-分块矩阵及方阵的行列式
  • C++ 内存对齐:alignas 与 alignof
  • 24/11/4 算法笔记 蛇形卷积
  • redis:list列表命令和内部编码
  • 11.4工作笔记
  • 【AI+教育】一些记录@2024.11.04
  • 数据结构---链表实现栈
  • 内置函数【MySQL】