python字符串和字节串有什么区别_对于Python中的字节串bytes和字符串以及转义字符的新的认识...
事情的起因是之前同学叫我帮他用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和字符串以及转义字符的新的认识...相关推荐
- python与其他的数据分析有什么区别_学好python和数据分析有什么关系?
1. 应用数学.统计学.金融学等相关专业,硕士及以上学历. 2. 有良好的产品Sense和商业敏感度,有2年以上电商.物流.零售等数据分析经验. 3. 精通SQL,有一定的Python或者R编程能力, ...
- python删除文件和linux删除文件区别_使用Python批量删除文件列表
使用Python批量删除文件列表 环境: 已知要删除的文件列表,即确定哪些文件要删除. 代码如下: #!/usr/bin/env python #coding=utf-8 #目的:本程序主要为删除给定 ...
- python装饰器两层和三层区别_学习python的第十五天(函数的装饰器,两层装饰器和三层装饰器)...
06.01自我总结 一.装饰器 1.函数装饰圈的定义 函数装饰器:一种装饰函数的函数 2.个人理解两层函数装饰器 两层函数装饰器个人觉得他其实就是把需要装饰的函数名丢入形参,然后用一个嵌套的函数对其头 ...
- c语言与python的语法区别_来自python的C语言(基本语法),从,Python,看,基础,篇
一个学过C/C++的咸鱼,最近学起了Python,不得不说,知识还是老知识,语法也简单多了,但就是容易搞混.大致总结一下Python与C的区别,以后别张冠李戴啦,嘻嘻. Part 1.输入与输出 输 ...
- python是什么和c++是什么区别_c++和python的区别有哪些
程序有两种执行方式,解释执行和编译执行. PYTHON是一种脚本语言,是解释执行的,不需要经过编译,所以很方便快捷,且能够很好地跨平台,写一些小工具小程序特别合适. 而C++则是一种需要编译后运行语言 ...
- python命令行模式和交互模式区别_对命令行模式与python交互模式介绍
命令行模式与python交互模式 1.在命令行模式下,可以执行 python 进入 Python 交互式环境,也可以执 行 python hello.py 运行一个.py 文件. 2.在 Python ...
- python语言的单行注释以井号开头_初识Python
Python Python开发 Python语言 初识Python 初识Python 计算机基础 计算机的组成: 输入输出设备.存储器.主板.CPU.硬盘.内存.显示器.电源.显卡. CPU:中央处理 ...
- 下列选项中不属于python循环语句的是哪一项_下列选项中,不属于字典操作的方法是哪一项?_学小易找答案...
[简答题]字符串有哪几种表现形式? [简答题]简述Python程序的执行过程. [单选题]Python 语句x='char';y=2,print(x+y)输出的结果是哪一项?() [编程题]输入三角形 ...
- python实现ssh登录后捕获回显_针对python的paramiko库ssh登录h3c设备print输出回显是空白的解决办法...
print输出回显是一大片空白,但是你将结果write写进txt文本时,是有内容的,但是每行代码之间会有2行空白,不美观. result = stdout.read() 显示的是bytes字节字符串: ...
最新文章
- 代码如何获取单反相机拍摄的照片_看看如何拍摄出更好的照片
- beta冲刺(2/7)
- java和python哪个好就业2020-JAVA和Python哪个好就业?
- 【转】判断五张牌是不是一个顺子
- LeetCode 565. 数组嵌套
- dj鲜生-让应用的模型类生效,搬家到云服务器-非本地操作
- 【C#编程基础学习笔记】4---Convert类型转换
- border_mode
- pandas中merge()函数的用法详解
- STM32——库函数版——数码管流动显示程序
- VS2017社区版许可证过期问题
- 用c语言软件制作监察病毒,弄了个病毒。用的是C语言,大家看看!
- 百度一键Root授权管理完美卸载解决方案
- 太阳的后裔--OST.3 This love这份爱
- 简单枚举(ZJM要抵御宇宙射线)
- java识别汉字个数_统计字符串中汉字的个数
- 【経験談】VS2013创建数据库连接失败问题
- 香港服务器机房TKO
- 七十年代译制片机器人的_老电影合集,怀旧经典电影,50,60,70,80年代,战争片,故事片,译制片...
- 从管易云·奇门到微盟通过接口配置打通数据
热门文章
- 在vue项目中:统一封装 Axios 接口与异常处理
- Apache服务器 配置多个网站解决方案
- python3的urllib2报错问题解决方法
- pringMVC“Ambiguous mapping found. Cannot map ‘XXXController‘ bean method”解决方法
- git ,报403错误,完美解决方案
- python:json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes问题解决
- IBM X3650 M4服务器安装centos找不到硬盘的解决方法
- Oracle VM VirtualBox启动新建虚拟机弹错--不能为虚拟机xxxx电脑 打开一个新任务 解决方法;
- nginx 405 not allowed问题的解决
- 多行字符串,带有多余的空格(保留缩进)