返回顶部
首页 > 资讯 > 后端开发 > Python >Python常见类型转换的小结
  • 197
分享到

Python常见类型转换的小结

Python常见类型转换Python 类型转换 2023-02-21 12:02:55 197人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录一:常见类型的概念二:类型转换1,二进制,八进制,十进制,十六进制转换2,数值字符串转换3,字符串和字节byte转换4,报文数据包和其他类型的互转4.1 bin十六进制

近期在工作中常常接触到各种转换,如字符串转byte,byte转字符串,还有byte数组转成报文能接纳的格式(bin格式的十六进制)。故有必要系统的总结一下python中常见的类型转换。

一:常见类型的概念

类型举例说明
二进制a = 0b1010二进制以0b打头
八进制b = 0o2345八进制以0o打头(注意是字母的o)
十进制c = 500十进制没有前缀
十六进制d = 0x12ff十六进制以0x打头
字符串e = "ftz"字符串的内容用引号或双引号括住
字节f = b'f12345'字节以b修饰,内容用引号或双引号括住
bin十六进制g = b'\x18\x17\x25'报文中的码流存在形式

二:类型转换

1,二进制,八进制,十进制,十六进制转换

>>> var = 100
>>> bin(var) #其他进制转二进制
'0b1100100'
>>> oct(var) #其他进制转八进制
'0o144'
>>> int(var) #其他进制转十进制
100
>>> hex(var) #其他进制转十六进制
'0x64'
>>>

2,数值字符串转换

>>> var = 100
>>>
>>> strNum = str(var) #数值转字符串
>>> strNum
'100'
>>>
>>> intNum = int(strNum) #字符串转数值
>>> intNum
100
>>>

注意:字符串转数值常见,转换成功的前提是被转换的对象只有全是数字字符才可以,不然会报错如下所示,此场景的转换一般在转换前要对对象进行判断用字符串的方法isdigit()

>>> int('abc')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'abc'
>>> 'abc'.isdigit()
False
>>> '124'.isdigit()
True
>>>

3,字符串和字节byte转换

解码的本质是选择二进制对应的图形,编码的本质是把字符图形转成相应编码的二进制。这只是一种显示的变化,在内存上并不一定有变化

>>> byteMyName = b'ftz'
>>> strMyName = 'ftz'
>>>
>>> strMyName.encode() #字符串转byte
b'ftz'
>>> byteMyName.decode() #byte转字符串
'ftz'

下面具体看下两个转换方法

decode方法有两个参数,encoding默认是用'utf-8'进行解码,errors默认用'strict'模式,如果需要一定的容错,则用'ignore'

 |  decode(self, /, encoding='utf-8', errors='strict')
 |      Decode the bytes using the codec reGIStered for encoding.
 |
 |      encoding
 |        The encoding with which to decode the bytes.
 |      errors
 |        The error handling scheme to use for the handling of decoding errors.
 |        The default is 'strict' meaning that decoding errors raise a
 |        UnicodeDecodeError. Other possible values are 'ignore' and 'replace'
 |        as well as any other name registered with codecs.register_error that
 |        can handle UnicodeDecodeErrors.

 decode() 方法的语法格式如下:

bytes.decode([encoding="utf-8"][,errors="strict"])

 decode() 方法用于将 bytes 类型的二进制数据转换为 str 类型,这个过程也称为“解码”

decode()参数及含义

参数含义
bytes表示要进行转换的二进制数据。
encoding="utf-8"指定解码时采用的字符编码,默认采用 utf-8 格式。当方法中只使用这一个参数时,可以省略“encoding=”,直接写编码方式即可。

注意,对 bytes 类型数据解码,要选择和当初编码时一样的格式。
errors = "strict"指定错误处理方式,其可选择值可以是:
  • strict:遇到非法字符就抛出异常。
  • ignore:忽略非法字符。
  • replace:用“?”替换非法字符。
  • xmlcharrefreplace:使用 xml 的字符引用。
该参数的默认值为 strict。

encode方法同样有两个参数,encoding默认是用'utf-8'编码进行转换

 |  encode(...)
 |      S.encode(encoding='utf-8', errors='strict') -> bytes
 |
 |      Encode S using the codec registered for encoding. Default encoding
 |      is 'utf-8'. errors may be given to set a different error
 |      handling scheme. Default is 'strict' meaning that encoding errors raise
 |      a UnicodeEncodeError. Other possible values are 'ignore', 'replace' and
 |      'xmlcharrefreplace' as well as any other name registered with
 |      codecs.register_error that can handle UnicodeEncodeErrors.

 encode() 方法的语法格式如下:

str.encode([encoding="utf-8"][,errors="strict"])

注意,格式中用 [] 括起来的参数为可选参数,也就是说,在使用此方法时,可以使用 [] 中的参数,也可以不使用。 

encode()参数及含义

参数含义
str表示要进行转换的字符串。
encoding = "utf-8"指定进行编码时采用的字符编码,该选项默认采用 utf-8 编码。例如,如果想使用简体中文,可以设置 gb2312。

当方法中只使用这一个参数时,可以省略前边的“encoding=”,直接写编码格式,例如 str.encode("UTF-8")。
errors = "strict"指定错误处理方式,其可选择值可以是:
  • strict:遇到非法字符就抛出异常。
  • ignore:忽略非法字符。
  • replace:用“?”替换非法字符。
  • xmlcharrefreplace:使用 xml 的字符引用。
该参数的默认值为 strict。

4,报文数据包和其他类型的互转

上面的都是铺垫,本节将是要重点介绍的内容。在用scapy构造报文或者编辑报文的过程中,常常需要从报文中提取我们感兴趣的内容或者将我们改造的数据插入到报文中。这里面就需要用到各种转换。最基本的操作就是将bin十六进制(报文中的数据,也称为码流)转int、转byte、转str。相反插入一段数据或者构造的数据到报文中,则是将int、byte、str类型转成bin十六进制。

下面将对十六进制码流和int、byte、str互转进行定义

bin十六进制转int将二进制文件中的b“\x01\x79”转为“377”的过程。本质上讲,就是把一个byte型十六进制数,转成十进制数的过程。(注意区别:int(0x178)时参数0x179是16进制整型而b’\x01\x79’是byte数组)
int转bin十六进制将“377”转为二进制文件中的b“\x01\x79”的过程。本质上讲,就是把一个十进制数,转成byte型十六进制数的过程。(注意区别:hex(377)得到的0x179是16进制整型而b’\x01\x79’是byte数组)
bin十六进制转byte将二进制文件中的b“\x04\xf9\x38\xad\x13\x26”取为b‘04f9381326’的过程。本质上讲,就是将每个十六进制数(4bit),转成一个采用ascii编码的byte(8bit)的过程
byte转bin十六进制将b‘04f9381326’取为二进制文件中的b“\x04\xf9\x38\xad\x13\x26”的过程。本质上讲,就是将每个采用ascii编码的byte(8bit),转成一个十六进制数(4bit)的过程
bin十六进制转str将二进制文件中b’\x48\x54\x54\x50’取为字符串‘Http’的过程。本质上讲,就是将ascii编码转成对应字符的过程。
str转bin十六进制将字符串‘HTTP’取为二进制文件中b’\x48\x54\x54\x50’的过程。本质上讲,字符转成就是对应的ascii编码的过程

4.1 bin十六进制与int互转实现

        bin十六进制转int主要在分析二进制文件、数据包头时获取长度等值时使用;相反,int转bin十六进制就是在构造二进制文件、数据包头时写入长度等值时使用。

        另外注意把bin十六进制当数值时有大端和小端两种模式,大端意思是开头(低地址)权重大,小端为开头(低地址)权重小。文件系统一般用小端模式,网络传输一般用大端模式。

转换方法说明
int转bin十六进制to_bytes(lenght,byteorder)lenght表示转成的多少个字节;byteorder可为big或little分别表示转bin十六进制时使用大端模式还是小端模式
bin十六进制转intint.from_bytes(byte_var,byteorder)byte_var是要转成数值的变bin十六进制变量,byteorder还是一样可为big或little,分别表示从bin十六进制转为数值时把bin十六进制当大端模式还是小端模式处理

举例:

将端口的对应的码流\xdc\x39转成56377

>>> int.from_bytes(b'\xdc\x39','big')
56377
>>>

将56377转成码流\xdc\x39

>>> port = 56377
>>> byteFromInt = port.to_bytes(2,'big')
>>> byteFromInt
b'\xdc9'
>>> byteFromInt == b'\xdc\x39'
True

转出来为什么是\xdc9,我们查一下ascii码表,9对应的十六进制就是\x39

4.2 bin十六进制和byte互转实现

bin十六进制转byte主要在分析二进制文件、数据包头时获取Mac地址、密钥等平时就以十六进制表示的值时使用;相反,byte转bin十六进制就是在构造二进制文件、数据包头时写入mac地址、密钥等平时就以十六进制表示的值时使用。这在用scapy构造数据包或者转换数据包时会经常用到,这里要用到第三方库binascii,使用时需要先导入

转换方法说明
bin十六进制转bytebinascii.b2a_hex(bin_var)bin_var为byte变量常从二进制文件中读出; 如binascii.b2a_hex(b’\x04\xf9\x38\xad\x13\x26’)结果为b’04f9381326‘
byte转bin十六进制binascii.a2b_hex(hex_byte_var)hex_byte_var为十六进制字节串; 如binascii.a2b_hex(b’04f9381326’)结果为b’\x04\xf98\x13&’(8对应的ascii编码是38,&对应的ascii编码是26)

举例:

>>> import binascii
>>> binascii.b2a_hex(b'\x48\x6f\x73\x74\x3a\x20\x63') #bin十六进制转byte
b'486f73743a2063'
>>>
>>> binascii.a2b_hex(b'486f73743a2063') #byte转bin十六进制
b'Host: c'
>>>

实际使用中我们经常会构造十六进制码流,然后将码流格式化成byte型,最后将byte转成bin十六进制

4.3 bin十六进制与str互转

bin十六进制转主要在分析二进制文件、数据包头时获取其量的字符串时使用;相反,byte转bin十六进制就是在构造二进制文件、数据包头时写入字符串时使用。

bin十六进制与str互转其实就是字符串和byte互转;此处的bin十六进制就是byte的本质。(b’\x48\x54\x54\x50’和b’HTTP’在内存中是一模一样的)

转换方法说明
bin十六进制转strdecode在第3节中有详细介绍
str转bin十六进制encode在第3节中有详细介绍

举例:

>>> byteHost = b'\x48\x6f\x73\x74'
>>>
>>> byteHost.decode()
'Host'
>>>
>>> str = 'Host'
>>> str.encode()
b'Host'
>>>

到此这篇关于Python常见类型转换的小结的文章就介绍到这了,更多相关Python常见类型转换内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python常见类型转换的小结

本文链接: https://lsjlt.com/news/196930.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python常见类型转换的小结
    目录一:常见类型的概念二:类型转换1,二进制,八进制,十进制,十六进制转换2,数值字符串转换3,字符串和字节byte转换4,报文数据包和其他类型的互转4.1 bin十六进制...
    99+
    2023-02-21
    Python常见类型转换 Python 类型转换
  • Python常见类型转换有哪些
    这篇文章主要讲解了“Python常见类型转换有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python常见类型转换有哪些”吧!一:常见类型的概念类型举例说明二进制a = 0b1010二...
    99+
    2023-07-05
  • 常见证书类型转换
    常见证书格式转换 常见的证书类型转换 PFX转JKS 找到jdk路径,使用命令行工具 cmd到jdk的bin下 2.执行keytool命令 keytool -importkeystore -srcke...
    99+
    2023-09-18
    服务器 https 运维
  • 【总结分享】golang中常见的类型转换方法
    Golang是一种强类型的编程语言,因此在处理不同类型之间的数据时,需要进行类型转换。本文将介绍Golang中常见的类型转换方法。数字类型转换在Golang中,数字类型转换是最常见的类型转换。常见的数字类型包括int、float32和flo...
    99+
    2023-05-14
    类型转换 Golang go语言
  • 介绍常见的Python数据类型转换函数
    Python中常用的数据类型转换函数介绍 在Python编程语言中,数据类型转换是一项常见且重要的操作。通过数据类型转换,我们可以将一个数据对象从一种类型转换为另一种类型,使得我们能够更灵活地处理不同类型的数据。本文将介绍Pyt...
    99+
    2024-01-20
    str() float() int()
  • golang中常见的类型转换方法有哪些
    本篇内容介绍了“golang中常见的类型转换方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!数字类型转换在Golang中,数字类型转...
    99+
    2023-07-05
  • C语言中强制类型转换的常见方法
    目录将浮点数转换为整数将整数转换为字符将指针转换为整数将整数转换为指针注意事项示例代码结论C语言是一门强大的编程语言,它允许我们对不同的数据类型进行各种运算和操作。但是有时候,我们需...
    99+
    2023-05-20
    C语言强制类型转换方法 C语言强制类型转换 C语言 类型转换
  • python bytes类型转换
    python bytes 类型转换bytes,字节: 而一系列不可改变的介于0-255之间的数字被称为bytes对象。每一个byte可以是一个ASCII字符或者十六进制数从\x00到\xff。    不能对bytes对象直接复制,可以将by...
    99+
    2023-01-31
    类型 python bytes
  • python的字符转换常见bug
    1.python把一个unicode字符串写入文件为什么会报错?write方法的参数类型是str,str是二进制流(不包含编码信息),当你给出一个unicode对象时,会执行str函数转换成str类型再送给write方法。unicode转s...
    99+
    2023-01-31
    字符 常见 python
  • 常见的Golang类型转换错误及其解决方案
    Golang类型转换的常见错误及解决方法 在使用Golang进行开发的过程中,类型转换无疑是一个经常遇到的问题。虽然Golang是一种静态类型的语言,但是在一些情况下我们仍然需要进行类...
    99+
    2024-02-25
    解决方法 常见错误 数据丢失 string类 golang开发
  • python常见错误类型
    Python标准异常总结 AssertionError 断言语句(assert)失败 AttributeError 尝试访问未知的对象属性 EOFError 用户输入文件末尾标志EOF(Ctrl+d) Floating...
    99+
    2023-01-31
    错误 常见 类型
  • Python常见异常类型处理
    目录1.Python语法错误 2.Python运行时错误 前言: 开发人员在编写程序时,难免会遇到错误,有的是编写人员疏忽造成的语法错误,有的是程序内部隐含逻辑问题造成的数据错误,还...
    99+
    2024-04-02
  • go 类型转换方式(interface 类型的转换)
    go 在做类型转换时,报错: cannot convert m (type interface {}) to type Msg: need type assertion 原...
    99+
    2022-06-07
    GO interface 类型转换
  • Python中bool类型转换
    在python中,以下数值会被认为是False: 为0的数字,包括0,0.0 空字符串,包括”,”“ 表示空值的None 空集合,包括(),[],{} 其他的值都认为是True。 None是python中的一个特殊值,表示什么...
    99+
    2023-01-31
    类型 Python bool
  • Python 数据类型转换
    平时我们在处理数据的时候,有些数据类型不是我们想要的,怎么办?一、数据类型转换:要转换的类型(数据)·        要把num01转换为整数:int(num01)·        要把num01转换为浮点数:float(num01)·  ...
    99+
    2023-01-31
    数据类型 Python
  • Python转换数据类型函数和转换数据类型的作用
    目录一、转换数据类型的作用(必要性)二、转换数据类型的函数三、快速体验数据类型转换前言: 学习Python的转换数据类型前期主要学习目标有两个,一是数据类型转换的必要性,二是数据类型...
    99+
    2024-04-02
  • python中的强制类型转换
    python内提供了几种称为强制类型转换的函数,可以将一个变量的类型强制转换为另一种类型。比如,整型->浮点型,列表->元组。 我们在之前已经学习了很多种数据类型 · 整型 int · 浮点型 float · 字符串型 str · 列表li...
    99+
    2023-10-24
    python 开发语言 服务器 网络 数据库
  • Python中的数据类型转换
    基本类型转换 python3与python2通用函数: int('123456',10) # 转换为指定进制的整数 hex(123456) # 整数转换为16进制串,转换后类型为字符串 bin(123) # 整数转换为...
    99+
    2023-01-31
    数据类型 Python
  • C++中常见的数据类型转换问题及解决方法
    C++ 中常见的数据类型转换问题及解决方法引言:在 C++ 编程中,经常会遇到不同数据类型之间的转换问题。正确地进行数据类型转换是保证程序正确性和性能的关键之一。本文将介绍一些常见的数据类型转换问题,并提供相应的解决方法和具体的代码示例。一...
    99+
    2023-10-22
    解决方法 数据类型转换 C++问题
  • C#中常见的数据类型转换问题及解决方案
    C#中常见的数据类型转换问题及解决方案在C#中,数据类型转换是一个常见的问题。由于C#是一种强类型语言,要求变量在进行计算或赋值时类型必须匹配。因此,当我们需要将一个数据类型转换为另一个数据类型时,可能会遇到各种问题。本文将介绍常见的数据类...
    99+
    2023-10-22
    数据类型转换解决方案
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作