大家好,欢迎来到IT知识分享网。
有这样一条需求:计算某个文件中的数组每一行元素的最后一个参数,异或输出。
因为元素比较多,十几行,通过人工去计算异或值非常困难。
而在线异或的计算器,也需要人为输入这些数值,每次计算一个最终结果需要花费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初始值为0 result=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进制字符串形式的结果result return 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, 0x, sfa | sfw, 0x2CC653CC }, { "ddd", 0x98A00000, 0x,sfa | sfw, 0xB2EB30ED }, { "eeeeee", 0xB6A00000, 0x, sfa | sfw, 0xB2EB30ED }, { "ffff", 0xD6A00000, 0x, sfa | sfaw, 0xB2EB30ED }, { ".gg", 0x0, 0x2A, 0, 0xC1CA9762 }, { "h", 0x, 0x18C0, sss | fsafa, 0x6DA15559 }, { "iiii", 0xA0529C14, 0x2D8, fsew | fsdse, 0xCB4C253C }, { "j", 0x0, 0x4831, 0, 0xEF0A5918 }, { "kkkkkkkk", 0x0, 0xC8, 0, 0xCF02F9B4 }, { "l", 0x0, 0x7BA8, 0, 0xDA }, { "pppp", 0x0, 0xF8D3, 0, 0xC3CD60A1 }, { "q", 0xA0529EEC, 0x40, sfwef | fewfwef, 0xB7601B }, { "rrrrrr", 0xA0, 0xB45B, fwefwef, 0xE7AB0B66 }, { "sssssssss", 0xA052A3E8, 0x7E10, wfewefw, 0xC4D809E8 }, { "t", 0xA05321F8, 0x3770, fwefwe, 0x524D9845 }, { "uuu", 0xA0529F2C, 0x4BC, fwewfw | fefwe, 0x75DEC15A }, { "vvvv", 0xA0, 0x3F10, fegfr, 0xBF053B26 }, { "ww", 0xA0529C00, 0x13, rettt, 0x24A10D1C }, { "xxxxxxxxxx", 0xA0082BB8, 0x40000, regwa, 0xE20EEA22 }, { "yyyyyy", 0xA007A1E0, 0x89D8, grere, 0x5A1F84AA }, { "zzzzzzzzz", 0x0, 0x1A8, 0, 0xBD310E5 }, { "a1", 0xA8, 0xE4, grergers | gewrgr, 0xF0BEF674 }, { "b1", 0x0, 0x1146F, 0, 0x7AAA5662 }, { "c1111", 0x0, 0x15450, 0, 0xF70B0C94 }, { "d22", 0xA0000000, 0x7A1E0, gergdr | gegss, 0xAD0AD88E }, { "ffff233", 0x, 0xF04, fweefgre | egwsdxw, 0x6C170AB3 }, }; unsigned int cszc = sizeof(csa) / sizeof(cs);
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/126152.html