事情的起因是之前同学叫我帮他用Python修改一个压缩包的二进制内容用来做fuzz,根据他的要求,把压缩包test.rar以十六进制的方式打开,每次修改其中一个十六进制字符串并保存为一个新的rar用来fuzz,于是我本来的打算是用传统的

open()函数来实现

file = open('test.rar','rb')

data= file.read()

通过open函数以二进制的方式打开,因为在Python中对二进制流的处理十分简单粗暴,默认的是以字节串bytes来表示的,形式则是以十六进制,比如b'\xff\x0f',可问题出现了,print(data)输出的字节串中的每一个十六进制数和使用工具hexedit打开显示的不完全一样,上例子

而Python中默认的输出结果为

对照一看可以发现ff d8 ff e0 00 10 4a 46,而Python中是ff d8 ff e0 00 10 JFIF,不对,这是为啥?

这就要说到Python中默认的转义机制了,通常我门知道的转义字符无非是\r \n \t等等,但是Python默认支持\x + 十六进制的转义字符,比如转义字符\x61,在终端输入\x61,返回的结果是字母a,而这是转义字符,它是字符串,如果是字节串形式的呢?答案是一样的

b'\x61' == b'a',OK,水落石出,Python默认情况下当遇到符合转义字符的字符串时会自动将他们转义,也就是说,在上面的hexedit中,'4a464946'的转义结果其实就是'JFIF',下面上证明:

按理来说,'a'编码后的字节串应为b'\x61',但在终端中使用encode编码之后结果显示是这样的:

编码过后的字节串依然被Python给转义了,服

可见,无论是单纯的字符串还是字节串,只要符合转义,Python解释器会默认将其转义。

Python中有一个bytes类,其中一个方法fromhex()可以直接将十六进制字符转换为字节串形式,例如:

情况如上,也就是说其实Python的输出是没错的但是表现形式不一样而已,而原因就是它默认的转义机制。

下面介绍几个常用的关于字节串bytes和十六进制和十进制互相转换的方法

(1)

print(bin(1))#以二进制表示

print(hex(255))#将0-255内的十进制整数以十六进制表示(还是字符串)

print(ord('\x0f'),' ',ord(b'\xff'))#将十六进制转义字符串和字节串转换为十进制数字

print(bytes.fromhex('ff')) #将十六进制字符串转换为字节串

for i in '\xff\x0f':print(i)#print默认会解码这些转义字符

for i in b'\xff\x0f':print(i)#默然输出的是每个字节的十进制整数 %x表示将其格式化为十六进制字符串 字节串也是可迭代对象,但是没有字符串自带的方法多。

0b10xff

15 255b'\xff'ÿ255

15

以后更新以十六进制读取任意文件并修改字节

python字符串和字节串有什么区别_对于Python中的字节串bytes和字符串以及转义字符的新的认识...相关推荐

  1. python与其他的数据分析有什么区别_学好python和数据分析有什么关系?

    1. 应用数学.统计学.金融学等相关专业,硕士及以上学历. 2. 有良好的产品Sense和商业敏感度,有2年以上电商.物流.零售等数据分析经验. 3. 精通SQL,有一定的Python或者R编程能力, ...

  2. python删除文件和linux删除文件区别_使用Python批量删除文件列表

    使用Python批量删除文件列表 环境: 已知要删除的文件列表,即确定哪些文件要删除. 代码如下: #!/usr/bin/env python #coding=utf-8 #目的:本程序主要为删除给定 ...

  3. python装饰器两层和三层区别_学习python的第十五天(函数的装饰器,两层装饰器和三层装饰器)...

    06.01自我总结 一.装饰器 1.函数装饰圈的定义 函数装饰器:一种装饰函数的函数 2.个人理解两层函数装饰器 两层函数装饰器个人觉得他其实就是把需要装饰的函数名丢入形参,然后用一个嵌套的函数对其头 ...

  4. c语言与python的语法区别_来自python的C语言(基本语法),从,Python,看,基础,篇

    一个学过C/C++的咸鱼,最近学起了Python,不得不说,知识还是老知识,语法也简单多了,但就是容易搞混.大致总结一下Python与C的区别,以后别张冠李戴啦,嘻嘻. Part  1.输入与输出 输 ...

  5. python是什么和c++是什么区别_c++和python的区别有哪些

    程序有两种执行方式,解释执行和编译执行. PYTHON是一种脚本语言,是解释执行的,不需要经过编译,所以很方便快捷,且能够很好地跨平台,写一些小工具小程序特别合适. 而C++则是一种需要编译后运行语言 ...

  6. python命令行模式和交互模式区别_对命令行模式与python交互模式介绍

    命令行模式与python交互模式 1.在命令行模式下,可以执行 python 进入 Python 交互式环境,也可以执 行 python hello.py 运行一个.py 文件. 2.在 Python ...

  7. python语言的单行注释以井号开头_初识Python

    Python Python开发 Python语言 初识Python 初识Python 计算机基础 计算机的组成: 输入输出设备.存储器.主板.CPU.硬盘.内存.显示器.电源.显卡. CPU:中央处理 ...

  8. 下列选项中不属于python循环语句的是哪一项_下列选项中,不属于字典操作的方法是哪一项?_学小易找答案...

    [简答题]字符串有哪几种表现形式? [简答题]简述Python程序的执行过程. [单选题]Python 语句x='char';y=2,print(x+y)输出的结果是哪一项?() [编程题]输入三角形 ...

  9. python实现ssh登录后捕获回显_针对python的paramiko库ssh登录h3c设备print输出回显是空白的解决办法...

    print输出回显是一大片空白,但是你将结果write写进txt文本时,是有内容的,但是每行代码之间会有2行空白,不美观. result = stdout.read() 显示的是bytes字节字符串: ...

最新文章

  1. 代码如何获取单反相机拍摄的照片_看看如何拍摄出更好的照片
  2. beta冲刺(2/7)
  3. java和python哪个好就业2020-JAVA和Python哪个好就业?
  4. 【转】判断五张牌是不是一个顺子
  5. LeetCode 565. 数组嵌套
  6. dj鲜生-让应用的模型类生效,搬家到云服务器-非本地操作
  7. 【C#编程基础学习笔记】4---Convert类型转换
  8. border_mode
  9. pandas中merge()函数的用法详解
  10. STM32——库函数版——数码管流动显示程序
  11. VS2017社区版许可证过期问题
  12. 用c语言软件制作监察病毒,弄了个病毒。用的是C语言,大家看看!
  13. 百度一键Root授权管理完美卸载解决方案
  14. 太阳的后裔--OST.3 This love这份爱
  15. 简单枚举(ZJM要抵御宇宙射线)
  16. java识别汉字个数_统计字符串中汉字的个数
  17. 【経験談】VS2013创建数据库连接失败问题
  18. 香港服务器机房TKO
  19. 七十年代译制片机器人的_老电影合集,怀旧经典电影,50,60,70,80年代,战争片,故事片,译制片...
  20. 从管易云·奇门到微盟通过接口配置打通数据

热门文章

  1. 在vue项目中:统一封装 Axios 接口与异常处理
  2. Apache服务器 配置多个网站解决方案
  3. python3的urllib2报错问题解决方法
  4. pringMVC“Ambiguous mapping found. Cannot map ‘XXXController‘ bean method”解决方法
  5. git ,报403错误,完美解决方案
  6. python:json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes问题解决
  7. IBM X3650 M4服务器安装centos找不到硬盘的解决方法
  8. Oracle VM VirtualBox启动新建虚拟机弹错--不能为虚拟机xxxx电脑 打开一个新任务 解决方法;
  9. nginx 405 not allowed问题的解决
  10. 多行字符串,带有多余的空格(保留缩进)