技术标签: Python
在C语言中输入十六进制
的数组,如下面的代码,通常是带有逗号,以及0x
的十六进制标志。而在CRC计算器中,输入数据进行识别的时候,应该去掉0x
,有的时候还要去掉空格
以及英文逗号
,所以我们需要去除字符串中特定位置
的字符。因为上位机是使用Python做的,所以引出本文内容:Python去除字符串中特定衣服或特定位置字符,本文中主要使用了replace函数
和pop函数
。
unsigned char test[8] = {
0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xFF}
Str_Input = self.Input.text() # 读取输入
Str_Input = Str_Input.replace(" ", "") # 去掉空格
Str_Input = Str_Input.replace(",", "") # 去掉逗号
去掉空格和逗号的原理是使用replace函数
把字符串中的" "及","
替换为""
,那么如何去除0x
呢?
0x
字符 因为已经去除了空格和逗号,所以后面讨论的内容都是0x120x340x560x780x9A0xBC0xDE0xFF
这种形式的,刚开始以为会有0x0x
的出现,所以去除0x
时不能使用replace函数
直接替换0x
避免把有效字符去掉;后面想到十六进制只有0-F
,不可能有x
的,所以是不会出现0x0x
这个数,因为有效字符里面不可能包含字符0x
。观察输入的规律,发现可以定点敲除。使用pop函数
可以敲除字符串里的某一个字符。比如list_Str_Input.pop(1)
是去除字符串中的索引为1
的字符。观察去除了空格以及逗号留下来的字符串0x120x340x560x780x9A0xBC0xDE0xFF
,可以发现每四个里面的后面两个是有效元素,所以我们只需要去除前两个字符即可以去掉0x
。
原理:如果只有四个字符,比如’0x12’,有两种方法可以去除’0x’,即是先去除0或者先去除x。
0
对于0x12,首先要使用list函数为每一个字符分配一个索引,0对应索引0,x对应索引1,1对应索引2,2对应索3
。先去除0之后,0x12变成x12,此时x的位置索引不再是1,而是0。新的索引位置变成了x对应索引0,1对应索引1,2对应索2
。所以我们只需要对索引0去除两次即可。
list_Str_Input.pop(0) # 剔除索引0即是剔除字符0
list_Str_Input.pop(0) # 第二次剔除索引0是剔除字符x
x
先去除x,是去除索引1
。去除x之后,’0x12‘
变成’012‘
,此时0
的位置索引依然是0
。新的索引位置变成了0对应索引0,1对应索引1,2对应索2
。对应的代码是
list_Str_Input.pop(1) # 剔除索引1即是剔除字符x
list_Str_Input.pop(0) # 剔除索引0即是剔除字符0
0x
上面输入的只有一个字节,如果是多个字节,比如0x120x340x560x780x9A0xBC0xDE0xFF
,对于上面的两种方法无论哪一种都是去除索引0和索引1的字符,只不过是先后顺序有区别。去除0x第一次后,字符串变成120x340x560x780x9A0xBC0xDE0xFF
,现在第一个0x
在索引2
和索引3
位置,去除0x第二次
后,字符串变成12340x560x780x9A0xBC0xDE0xFF
,第一个0x
在索引4
和索引5
位置,所以每次去除的索引位置相比着上一次增加2
。len(list_Str_Input) >> 2
求出需要循环去除0x的次数i-max
,然后3.1和3.2中的索引的位置每次增加2
。
Str_Input = ' 0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xFF'
Str_Input = Str_Input.replace(" ", "") # 去掉空格
Str_Input = Str_Input.replace(",", "") # 去掉逗号
# Str_Input = Str_Input.replace("0x", "") # 去掉0x,可以用,因为输入的十六进制里面不可能包含0x
list_Str_Input = list(Str_Input) # list为每一个字符分配一个索引
for i in range(0, len(list_Str_Input) >> 2): # for循环0,2,只循环=0,=1
# list_Str_Input.pop(1 + 2 * i) # 先剔除索引1,0x12变成012,在剔除索引0
# list_Str_Input.pop(0 + 2 * i)
list_Str_Input.pop(0 + 2 * i) # 先剔除索引0,0x12变成x12,在剔除索引0即剔除字符x
list_Str_Input.pop(0 + 2 * i)
list_Str_Output = ''.join(list_Str_Input) # 合并为字符串
因为是不会出现0x0x
这个数,所以我们使用replace函数
也可以把字符串中的0x
去掉,虽然比使用pop函数
简单,但是3.1和3.2中的去除字符的方法思路可以使用到其他的地方去。
Str_Input = Str_Input.replace("0x", "") # 去掉0x,可以用,因为输入的十六进制里面不可能包含0x
文章浏览阅读1.8k次。Exception in thread "main" java.lang.NullPointerException at java.util.ArrayList.addAll(ArrayList.java:559) at com.iflytek.epdcloud.recruit.utils.quartz.Acool.main(Acool.java:16)import java.u..._addall(null)
文章浏览阅读4.5k次。public static void main(String[] args) { Calendar todayStart = Calendar.getInstance(); todayStart.set(Calendar.HOUR_OF_DAY, 0); todayStart.set(Calendar.MINUTE, 0); toda..._java 获取某分钟的起止时间戳
文章浏览阅读1.1k次。合适的工作难找?最新的招聘信息也不知道?AI 求职为大家精选人工智能领域最新鲜的招聘信息,助你先人一步投递,快人一步入职!京东 AI 研究院京东 AI 研究院(https://air.jd..._京东计算机视觉实验室
文章浏览阅读2.1k次。Ubuntu18.04安装配置Qt5.15 Ubuntu18.04安装配置Qt5.15 Qt选择下载Qt安装Qt5.15.0配置后记 Qt选择 在官方的声明中,Qt5.15是Qt5.x的最后一个LTS版本,增加了即将在2020年底推出的Qt6的部分新特性,为了之后的新_ubuntu安装qt5.15
文章浏览阅读1.8w次,点赞5次,收藏3次。针对Error: You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings问题的解决使用intelliJ Idea开发django项目,启动 manage.py 测试时,会出现如上所示问题。根据提示,有两种解_project structure->facets->django->
文章浏览阅读171次。【代码】matplotlib 设置标签和图例。_matplotlib title设置
文章浏览阅读3k次。《文字学概论》作业一、单选题1、原始社会陶器上的图形符号刻划是以( )为代表的。A 仰韶文化 B 马家窑文化 C 良渚文化 D 大汶口文化2、下列各字中不属于象形字的是( )。A十 B小 C羊 D未3、“画成弃物 ,随体诘屈”,是许慎给六书当中的( )所下的定义。A 象形 B 指事 C 假借 D 会意4、下列各字当中形旁为"肉”的是( )。A 肌 B 明 C 钥 D 腾5、“夫” 字是在“大”字之上加一横而成的,这_十小羊未哪一个不是象形字
文章浏览阅读328次,点赞9次,收藏8次。tiny_tds: 简易的Microsoft SQL Server驱动程序 for Rubytiny_tds 是一个小巧且高效的Microsoft SQL Server驱动程序,专为Ruby编程语言设计。它提供了与SQL Server进行交互的能力,可以轻松地执行查询、事务管理以及数据操作。项目简介tiny_tds是一个开源项目,由Rails SQL Server社区开发并维护。该库支持多种...
文章浏览阅读8.6k次。1,基础篇:1.1《SQL基础教程》本书是畅销书《SQL基础教程》第2版,介绍了关系数据库以及用来操作关系数据库的SQL语言的使用方法。书中通过丰富的图示、大量示例程序和详实的操作步骤说明,让读者循序渐进地掌握SQL的基础知识和使用技巧,切实提高编程能力。每章结尾设置有练习题,帮助读者检验对各章内容的理解程度。另外,本书还将重要知识点总结为“法则”,方便读者随时查阅。第2版除了将示例程序更新为对应..._高性能mysql第五版 pdf
文章浏览阅读931次,点赞33次,收藏18次。首先创建一个maven项目,使用的spring-boot版本为2.3.5.RELEASE,对应的spring cloud版本为Hoxton.RELEASE。我们在这个父项目里创建一个子模块consul-dev,如果使用idea的话,就在父项目上,右键new module,完善模块信息后就创建出来了,模块会配置在上面标签中。我的consul是用docker部署到Linux服务器上的,你自己测试的时候可以本地下载个windows版本的。我自己用的是latest最新版,你可以选择你喜欢的版本。
文章浏览阅读2.6k次。java通过web3j监听并解析合约中的事件_java web3j 上链数据
文章浏览阅读1.4k次。C++包管理工具_c++包管理工具