用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初始值为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, 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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值