python两个文件内容异或,python 异或两个文件-程序员宅基地

技术标签: python两个文件内容异或  

问题描述:python以16进制读取文本,就是获取以下图片红框中的DF,F8,DF这些16进制,然后做一些处理,再写到文件中。

5f6c192ec86823b4e407ecc7f0729476.png

1个字节 == 8Bit == 两个hex(1~F)

文件读取可以按行readline。。

f = open('1.txt','rb')

while True:

t = f.readline()

if not t :

break

f.close() 但这么做,只能获取一个str对象

str转成hexs[]:

hexs = []

for ss in s:

tmp = (hex(ord(ss)).replace('0x',''))

if len(tmp) == 2:#DF之类的

hexs.append(tmp)

else:#0D之类的,默认写成D

hexs.append('0'+tmp) 但这么做,获取的hexs,也是type(str)对象,hex()本来返回的是就是一个str对象

hexs[]转成真正的16进制数据:

其实到这里一想,python内部的数字表示一定都是2进制啊,我用16进制最终写入文件的是二进制,用10进制最终写入文件的也依旧是二进制。那么,思路是直接把hexs转成10进制,反正计算机内部一定把它当成2进制了。

arr = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f']

arr2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

def tran(r):#把0~F转成数字

for i in range(len(arr)):

if r == arr[i]:

return arr2[i]

res = []

for i in range(len(hexs)):

a = tran(hexs[i][0])*16+tran(hexs[i][1])

res.append(a) 但这么做,写入文件是不成功的,比如说我要往文件写16进制FD,上面代码将它转成253,但是这么写入文件,不是我们期盼的。我们要在最上面的图片的红框中写入了FD,而不是在黑框中写入了253。

10进制转成2进制,文件open的时候,带上'b'参数

Ps:别忘了import strcut

ff = open('out.txt','wb')

for i in res:

B = struct.pack('B',i)

ff.write(B)

ff.close()

如此一来就写入文件成功,思路到这里就完成了。

对两个文件的xor处理

# -*- coding: cp936 -*-

import binascii

import struct

#每个字节转成hex,0x顺便去掉,对于不足两位的补0

def str2hex(str):

hexs = []

for s in str:

tmp = (hex(ord(s)).replace('0x',''))

if len(tmp) == 2:

hexs.append(tmp)

else:

hexs.append('0'+tmp)

return hexs

arr = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f']

arr2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

def tran(r):

for i in range(len(arr)):

if r == arr[i]:

return arr2[i]

f = open('1.txt','rb')

f2 = open('2.jpg','rb')

hexs = []

hexs2 = []

while True:

t = f.readline()

t2 = f2.readline()

if not t or not t2:

break

hexs.extend(str2hex(t))

hexs2.extend(str2hex(t2))

f.close()

f2.close()

ff = open('out.txt','wb')

for i in range(min(len(hexs),len(hexs2))):

a = tran(hexs[i][0])*16+tran(hexs[i][1])

b = tran(hexs2[i][0])*16+tran(hexs2[i][1])

B = struct.pack('B',a^b)

ff.write(B)

ff.close()

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39680380/article/details/116178549

智能推荐

mybatis-plus基础知识,java分布式面试题-程序员宅基地

文章浏览阅读922次,点赞8次,收藏16次。2020年在匆匆忙忙慌慌乱乱中就这么度过了,我们迎来了新一年,互联网的发展如此之快,技术日新月异,更新迭代成为了这个时代的代名词,坚持下来的技术体系会越来越健壮,JVM作为如今是跳槽大厂必备的技能,如果你还没掌握,更别提之后更新的新技术了。更多JVM面试整理:一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

Java类加载器 以及类加载器的委托模型_类加载模型及类加载器-程序员宅基地

文章浏览阅读1.9k次。我们知道 我们在Java中用到的所有的类都是通过类加载器ClassLoader加载到JVM中的,我们还知道 类加载器 也对应着一个类 ,既然这样那么我们会想 那么ClassLoader类是由谁加载的呢? 其实在Java中有许许多多的 类加载器 我们甚至可以写自己的类加载器 。其中主要三个类加载器(他们是树形关系)是 : BootStrap : 在java虚拟机启动的时候会利_类加载模型及类加载器

LDAP_ldap存储用户角色-程序员宅基地

文章浏览阅读1k次。LDAP什么是LDAPLDAP是轻量目录访问协议(Lightweight Directory Access Protocol)的缩写,LDAP标准实际上是在X.500标准基础上产生的一个简化版本。LDAP使用场景 ldap存放用户和角色信息,还有用户和角色之间关系的维护。授权是在应用系统中完成的,也就是说应用从LDAP中获取到用户和用户对应的角色,应用系统再根据用户的角色进行授权,比如说用户可以_ldap存储用户角色

android布局图片叠放,Android – 在图片/缩图上叠加播放按钮的最佳方式-程序员宅基地

文章浏览阅读732次。我有一个Android应用程序,可播放音频/视频和显示图片.对于视频,我想覆盖预览图像顶部的播放按钮以及列表视图.现在我正在做的是在xml中使用ImageView,然后drawable是一个图层列表,我以编程方式定义,因为其中一个图像是动态的,播放按钮当然是静态的.我想从底部对齐播放按钮10px,水平居中.我的ImageView是这样定义的(在xml中)android:id="@+id/Evide..._android imageview 放前面 linearlayout 没有叠加上去

MATLAB Boxplot填充颜色并更改箱体及异常点颜色_matlab boxplot颜色-程序员宅基地

文章浏览阅读8.1k次。箱型图绘制及优化_matlab boxplot颜色

Windows下python库的常用安装方法_电脑怎么安装py库-程序员宅基地

文章浏览阅读6.2w次,点赞20次,收藏76次。Windows下python库的常用安装方法 摘要:相信大家经常被在Windows底下如何安装我们所需要的库而头疼不已,不是缺这个文件就是缺那个文件,下面介绍几种常用的安装方法。持续更新,把我遇到过的问题都写出来。 目录: 1.pip安装(需要pip) 2.通过下载whl文件安装(需要pip) 3.在pythn官网下载安装包安装(不需要pip)..._电脑怎么安装py库

随便推点

吴裕雄--天生自然 PYTHON3开发学习:CGI编程-程序员宅基地

文章浏览阅读90次。<Directory "/var/www/cgi-bin"> AllowOverride None Options +ExecCGI Order allow,deny Allow from all</Directory>print ("Content-type:text/html")print () ..._python3 安装cgi

接口测试工具Apifox 基础篇:配置环境-程序员宅基地

文章浏览阅读1.3w次,点赞10次,收藏21次。一、环境管理一个项目在不同的阶段会处于不同的环境中,比如开发环境、测试环境、生产环境,通常不同的环境有不同的前置 URL、接口参数等。因环境不同而频繁的更改接口前置 URL 及参数,是非常的麻烦的。有了环境管理功能,只需在不同的环境设置不同的前置 URL 及参数,在不同环境中测试时,直接切换环境即可。二、 快速上手1、 打开环境管理(软件右上角设置形状的按钮)2、打开环境管理界面后,即可在这里新建或修改环境3、添加前置url,全局参数,环境变量3.1 添加前置url.._apifox

进程与线程的描述与控制,核心级线程和用户级线程的区别_进程与线程的区别,用户级线程和核心级线程的区别-程序员宅基地

文章浏览阅读1.4k次。本文原作者分类在操作系统下面是以window系统来说明的,但其实Linux系统也是一样的!作者:saber出处:http://blog.csdn.net/xywlpo/article/details/67496851.1 程序的并发执行及特点为了提高计算机的利用率、处理速度和系统的处理能力,并行处理技术和并发程序设计技巧在计算机中得到广泛应用,成为现代操作系统的_进程与线程的区别,用户级线程和核心级线程的区别

Spring下载教程(保姆级)-程序员宅基地

文章浏览阅读5.1k次,点赞14次,收藏50次。spring下载教程(保姆级)_spring下载

xmapp启动MySQL出错_使用xmapp启动mysql出现 mysqld.exe: incorrect information-程序员宅基地

文章浏览阅读634次。报错原因:解决办法:将本地已有的MySQL关闭掉,就能重新启动了。打开任务,找到MySQL将其停止服务,再去xampp启动MySQL。成功解决:_使用xmapp启动mysql出现 mysqld.exe: incorrect information in file: '.\mysql\p

SublimeText 3 完整的 Python 开发环境配置_sublime配置python开发环境-程序员宅基地

文章浏览阅读568次。安装SublimeText 3地址:https://www.sublimetext.com/3 下载安装 安装时记得勾选 Add to explorer context menu 意味着以后你可以右键文件选择用Sublime Text打开注册注册码:2018/4/9更新TwitterInc 200 User License EA7E-890007..._sublime配置python开发环境

推荐文章

热门文章

相关标签