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.mzph.cn/web/58112.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

‌MySQL中‌between and的基本用法‌

文章目录 一、between and语法二、使用示例2.1、between and数值查询2.2、between and时间范围查询2.3、not between and示例 BETWEEN AND操作符可以用于数值、日期等类型的字段,包括边界值。 一、between and语法 MySQL中的BETWEEN AND操作符用于在两个值之间选择…

微服务系列一:基础拆分实践

目录 前言 一、认识微服务 1.1 单体架构 VS 微服务架构 1.2 微服务的集大成者:SpringCloud 1.3 微服务拆分原则 1.4 微服务拆分方式 二、微服务拆分入门步骤 :以拆分商品模块为例 三、服务注册订阅与远程调用:以拆分购物车为例 3.1 …

Spring的常用注解之@Component——day1

1、Component Component:泛指各种组件;它允许 Spring 自动检测自定义 Bean。换句话说,无需编写任何明确的代码,Spring 就能做到: 扫描应用,查找注解为 Component 的类将它们实例化,并注入任何…

jvm学习笔记-轻量级锁内存模型

一,轻量级锁 LockRecord的那个第一个成员变量是拷贝对应锁定了的java对象资源的MarkWord,Lock Record有一个Ptr指针刚开始指向自己,后面这个指针存储在锁定资源的java对象的markword中,后续可以通过java对象的MarkWord快速定位到…

C++在游戏领域的主要应用

1、C简介 C是一种通用的程序设计语言,其设计就是为了使认真的程序员工作得更愉快。除了一些小细节之外,C是C程序设计语言的一个超集。C提供了C所提供的各种功能还为定义新类型提供了灵活而有效的功能。程序员可以通过定义新类型,使这些类型与…

什么是制造项目管理?

制造项目管理是指在制造行业中管理和协调各类项目活动的过程,以实现产品的有效生产。这类项目通常涉及复杂的资源配置、流程优化、成本控制和质量管理,旨在确保产品按时、按质地完成,并满足市场需求。制造项目在现代工业中非常常见&#xff0…

【力扣专题栏】面试题 01.02. 判定是否互为字符重排,如何利用数组模拟哈希表解决两字符串互排问题?

题解目录 1、题目描述解释2、算法原理解析3、代码编写(1)、两个数组分别模拟哈希表解决(2)、利用一个数组模拟哈希表解决问题 1、题目描述解释 2、算法原理解析 3、代码编写 (1)、两个数组分别模拟哈希表解决 class Solution { public:bool CheckPermutation(string s1, stri…

指针和内存地址的关系(uint8_t和uint32_t的指针有什么区别)

指针在我们的学习中非常常见,有些人只是了解指针的基本概念,却不知道他的原理,到时候使用起来一头雾水,接下来我将对指针做出一些解释说明。 一、数据是如何存储的: 我们初始化一个int变量a,变量a会存储到内存中&#…

【基于LSM的ELF文件安全模块设计】参考

《基于LSM的ELF文件安全模块设计文档》 一、设计目标 本设计致力于通过 Linux 安全模块(LSM)构建一个强大而严密的安全防护体系,以实现对 ELF 文件(涵盖可执行文件和动态链接库)的绝对严格的合法性和完整性检查。其核…

flutter 专题四 Flutter渲染流程

一、 Widget - Element - RenderObject关系 二、 Widget 、Element 、RenderObject 分别表示什么 2.1 Widget Widget描述和配置子树的样子 Widget就是一个个描述文件,这些描述文件在我们进行状态改变时会不断的build。但是对于渲染对象来说,只会使用最…

高效内容营销策略提升品牌影响力与客户忠诚度

内容概要 内容营销是一种通过创造和分享有价值的内容,以吸引特定目标受众并促进品牌发展的策略。这种营销形式不仅仅注重产品的直接推广,更着眼于与受众之间建立长期的信任关系。有效的内容营销能够提升品牌在市场中的影响力和客户的忠诚度,…

vue3 ref和reactive踩坑

起因:开发时做一个列表状态筛选,遇到了数据更新但视图层没有更新的情况,把数据改为ref去操作即完成响应式数据的更新。 const hourRoomTableData reactive([]}if (val 1) {hourRoomTableData hourRoomTableData.filter((item) > item.i…

git 入门作业

任务1: 破冰活动:自我介绍任务2: 实践项目:构建个人项目 git使用流程: 1.将本项目直接fork到自己的账号下,这样就可以直接在自己的账号下进行修改和提交。 这里插一条我遇到的问题,在fork的时候没有将那个only camp4的…

学webpack之loader原理,让面试官跪下来唱征服

引言 什么是loader? 众所周知,webpack是个只能识别js和json文件的小笨蛋,所以就要有loader来转换,让文件能被webpack识别到,从而顺利打包,loader还能对资源进行优化,如压缩图片,代…

前端如何优化页面中的大量任务

直奔主题,如果页面中有100万个任务需要执行,怎么保证页面不卡顿? 可以采取以下几种策略: 任务分片执行: 利用requestIdleCallback和requestAnimationFrame来分片执行任务。requestIdleCallback可以在浏览器空闲时执行…

NumPy Ndarray学习

1.NumPy Ndarray 对象简介 NumPy 最重要的特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。ndarray 对象是用于存放同类型元素的多维数组。ndarray 中的每个元素在内存中都有相同存储大小的区域。 2.N…

网络层3——IP数据报转发的过程

目录 一、基于终点的转发 1、理解 2、IP数据报转发过程 二、最长前缀匹配 1、理解 2、主机路由 3、默认路由 三、二叉线索查找 一、基于终点的转发 1、理解 理解什么叫终点转发 IP数据报的传递,交给路由器后 可不可以做到直接发送给目的主机呢?…

【UGUI】为射击游戏添加动态显示的分数和血量到UI界面

项目背景 在这个项目中,我们希望实现一个简单的游戏系统,其中玩家可以通过击中目标来获得分数,同时通过与怪物碰撞来减少血量。分数和血量需要在游戏界面上实时显示,以便玩家能够随时了解自己的状态。 技术实现 1. 静态变量的使…

使用Spring Boot搭建简单的web服务

1 引言 1.1 Spring Boot简介 Spring Boot是由Pivotal团队提供的一套开源框架,旨在简化Spring应用的创建及部署。 一、核心设计思想 Spring Boot的核心设计思想是“约定优于配置”(Convention Over Configuration,简称COC)。这…

「C/C++」C/C++标准库 之 #include<cstdlib> 通用工具函数库

✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…