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

用python实现一个异或计算器

有这样一条需求:计算某个文件中的数组每一行元素的最后一个参数,异或输出。

因为元素比较多,十几行,通过人工去计算异或值非常困难。

而在线异或的计算器,也需要人为输入这些数值,每次计算一个最终结果需要花费2-3分钟手动输入,手酸。

于是想做一个异或工具,实现这个功能。

异或工具:

1.从文件读取每行,找到最后一个参数

2.把这些参数进行异或

3.异或的结果以16进制输出到弹窗

import fnmatch
import os
from tkinter import messagebox"""
本异或工具功能:计算文件里数组里面每行最后一个值的异或值
计算完所有的异或值之后就输出结果
""""""
定义一个cal_XOR_value方法:
找到文件里所有目标值
传入参数:文件名
读取文件每行内容,contents接收返回结果
对contents的值content切片,取倒数第二个值转换为字符串
对该字符串切片,匹配开头为0x的字符
取到了第一个值,就把该值和初始值为0的变量result进行异或,结果存入result里
下一次取到值,就用该值和result异或,直到所有值都计算完毕,返回result
接收到返回结果之后追加到列表result_list中,然后继续遍历下个文件
所有文件的异或值计算好之后,弹窗输出
"""
def cal_XOR_value(file):#result用来存放异或结果,一个数异或0等于它本身,所以result初始值为0result=0#打开传入的文件with open(file,mode="r")as f :#逐行读取该文件的内容(题目要求每行元素)contents=f.readlines()#遍历每行元素for content in contents:#以空格分割切片,取倒数第二个值#根据文件的实际情况就是该值,文件格式不会变,所以我这里写死了value="".join(content.split(" ")[-2:-1])#如果取到的值是0x开头的,就把它转为int型,与result异或if value[0:2]=="0x":#把0x开头的十六进制字符串转化为10进制val=int(value,16)result^=val#一个文件的所有值都异或完毕之后,返回以16进制字符串形式的结果resultreturn hex(result)
#列表存放多个文件的结果,1个文件1个结果
result_list=[]
#找到当前目录所有.c结尾的文件
for root,dirs,files in os.walk("./"):for file in files:file_name=os.path.join(root,file)if fnmatch.fnmatch(file_name,"*.c"):#调用计算异或的方法,计算出当前文件的异或结果,追加到result_list中result_list.append(cal_XOR_value(file_name))
#所有符合要求的文件都计算出异或值之后,弹窗展示。
#其中英文字母都转换为大写,此处为了方便查看,我还在每个值的后面加了几个空格
messagebox.showinfo(title="异或值输出",message=[result.upper()+"   " for result in result_list])

参考文件:(有做过改动,仅供参考)

#include <cs.h>#define cs	asdfsf((section("fsfwfwge")))CS csa[] cs = 
{{ "aaa", 0x0, 0x29, 0, 0x2AE590E7 },{ "bbb", 0xA052A3E8, 0x0, sfa, 0x0 },{ "ccc", 0xA00C2C00, 0x467000, sfa | sfw, 0x2CC653CC },{ "ddd", 0x98A00000, 0x4000000,sfa | sfw, 0xB2EB30ED },{ "eeeeee", 0xB6A00000, 0x4000000, sfa | sfw, 0xB2EB30ED },{ "ffff", 0xD6A00000, 0x4000000, sfa | sfaw, 0xB2EB30ED },{ ".gg", 0x0, 0x2A, 0, 0xC1CA9762 },{ "h", 0x70111990, 0x18C0, sss | fsafa, 0x6DA15559 },{ "iiii", 0xA0529C14, 0x2D8, fsew | fsdse, 0xCB4C253C },{ "j", 0x0, 0x4831, 0, 0xEF0A5918 },{ "kkkkkkkk", 0x0, 0xC8, 0, 0xCF02F9B4 },{ "l", 0x0, 0x7BA8, 0, 0xDA630629 },{ "pppp", 0x0, 0xF8D3, 0, 0xC3CD60A1 },{ "qqqqq", 0xA0529EEC, 0x40, sfwef | fewfwef, 0xB7601B },{ "rrrrrr", 0xA0539878, 0xB45B, fwefwef, 0xE7AB0B66 },{ "sssssssss", 0xA052A3E8, 0x7E10, wfewefw, 0xC4D809E8 },{ "t", 0xA05321F8, 0x3770, fwefwe, 0x524D9845 },{ "uuu", 0xA0529F2C, 0x4BC, fwewfw | fefwe, 0x75DEC15A },{ "vvvv", 0xA0535968, 0x3F10, fegfr, 0xBF053B26 },{ "ww", 0xA0529C00, 0x13, rettt, 0x24A10D1C },{ "xxxxxxxxxx", 0xA0082BB8, 0x40000, regwa, 0xE20EEA22 },{ "yyyyyy", 0xA007A1E0, 0x89D8, grere, 0x5A1F84AA },{ "zzzzzzzzz", 0x0, 0x1A8, 0, 0xBD310E5 },{ "a1", 0x701118A8, 0xE4, grergers | gewrgr, 0xF0BEF674 },{ "b1", 0x0, 0x1146F, 0, 0x7AAA5662 },{ "c1111", 0x0, 0x15450, 0, 0xF70B0C94 },{ "d22", 0xA0000000, 0x7A1E0, gergdr | gegss, 0xAD0AD88E },{ "ffff233", 0x70110000, 0xF04, fweefgre | egwsdxw, 0x6C170AB3 },};unsigned int cszc = sizeof(csa) / sizeof(cs);

http://www.lryc.cn/news/121665.html

相关文章:

  • Sketch打不开AI文件?转换方法在这里
  • 小游戏扫雷实现教学(详解)
  • 04 mysql innodb record
  • Centos7安装Docker
  • Vue中如何更好地封装组件?
  • C语言的链表的相关操作
  • Python3中typing模块
  • C语言自动抓取淘宝商品详情网页数据,实现轻松高效爬虫
  • 数据结构---跳表
  • 为什么Tomcat的NIO在读取body时要模拟阻塞?
  • 26 | 谷歌应用APP数据分析
  • BFS 五香豆腐
  • opencv实战项目 手势识别-手势控制键盘
  • 1.作用域
  • 黑马B站八股文学习笔记
  • 前端常用的上传下载文件的几种方式,直接上传、下载文件,读取.xlsx文件数据,导出.xlsx数据
  • FPGA应用学习笔记--时钟域的控制 亚稳态的解决
  • AirServer是什么软件,手机屏幕投屏电脑神器
  • 如何使用 AT+WEBSERVER 指令实现自定义的 Webserver html 网页配网
  • 期权定价模型系列【4】—期权组合的Delta-Gamma-Vega中性
  • k8sday02
  • 黑马头条项目学习--Day2: app端文章查看,静态化freemarker,分布式文件系统minIO
  • 特语云用Linux和MCSM面板搭建 我的世界基岩版插件服 教程
  • 2023.8
  • CSV文件编辑器——Modern CSV for mac
  • 全国各地区数字经济工具变量-文本词频统计(2002-2023年)
  • MacOS安装RabbitMQ
  • 关于selenium 元素定位的浅度解析
  • 狐猬编程:货运
  • SpringBoot复习:(34)@EnableWebMvc注解为什么让@WebMvcAutoconfiguration失效?