亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python常見類型轉(zhuǎn)換的小結(jié)

 更新時(shí)間:2023年02月21日 11:06:49   作者:ftzchina  
本文主要介紹了Python常見類型轉(zhuǎn)換的小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

近期在工作中常常接觸到各種轉(zhuǎn)換,如字符串轉(zhuǎn)byte,byte轉(zhuǎn)字符串,還有byte數(shù)組轉(zhuǎn)成報(bào)文能接納的格式(bin格式的十六進(jìn)制)。故有必要系統(tǒng)的總結(jié)一下Python中常見的類型轉(zhuǎn)換。

一:常見類型的概念

類型舉例說明
二進(jìn)制a = 0b1010二進(jìn)制以0b打頭
八進(jìn)制b = 0o2345八進(jìn)制以0o打頭(注意是字母的o)
十進(jìn)制c = 500十進(jìn)制沒有前綴
十六進(jìn)制d = 0x12ff十六進(jìn)制以0x打頭
字符串e = "ftz"字符串的內(nèi)容用引號或雙引號括住
字節(jié)f = b'f12345'字節(jié)以b修飾,內(nèi)容用引號或雙引號括住
bin十六進(jìn)制g = b'\x18\x17\x25'報(bào)文中的碼流存在形式

二:類型轉(zhuǎn)換

1,二進(jìn)制,八進(jìn)制,十進(jìn)制,十六進(jìn)制轉(zhuǎn)換

>>> var = 100
>>> bin(var) #其他進(jìn)制轉(zhuǎn)二進(jìn)制
'0b1100100'
>>> oct(var) #其他進(jìn)制轉(zhuǎn)八進(jìn)制
'0o144'
>>> int(var) #其他進(jìn)制轉(zhuǎn)十進(jìn)制
100
>>> hex(var) #其他進(jìn)制轉(zhuǎn)十六進(jìn)制
'0x64'
>>>

2,數(shù)值字符串轉(zhuǎn)換

>>> var = 100
>>>
>>> strNum = str(var) #數(shù)值轉(zhuǎn)字符串
>>> strNum
'100'
>>>
>>> intNum = int(strNum) #字符串轉(zhuǎn)數(shù)值
>>> intNum
100
>>>

注意:字符串轉(zhuǎn)數(shù)值常見,轉(zhuǎn)換成功的前提是被轉(zhuǎn)換的對象只有全是數(shù)字字符才可以,不然會(huì)報(bào)錯(cuò)如下所示,此場景的轉(zhuǎn)換一般在轉(zhuǎn)換前要對對象進(jìn)行判斷用字符串的方法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,字符串和字節(jié)byte轉(zhuǎn)換

解碼的本質(zhì)是選擇二進(jìn)制對應(yīng)的圖形,編碼的本質(zhì)是把字符圖形轉(zhuǎn)成相應(yīng)編碼的二進(jìn)制。這只是一種顯示的變化,在內(nèi)存上并不一定有變化

>>> byteMyName = b'ftz'
>>> strMyName = 'ftz'
>>>
>>> strMyName.encode() #字符串轉(zhuǎn)byte
b'ftz'
>>> byteMyName.decode() #byte轉(zhuǎn)字符串
'ftz'

下面具體看下兩個(gè)轉(zhuǎn)換方法

decode方法有兩個(gè)參數(shù),encoding默認(rèn)是用'utf-8'進(jìn)行解碼,errors默認(rèn)用'strict'模式,如果需要一定的容錯(cuò),則用'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 類型的二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為 str 類型,這個(gè)過程也稱為“解碼”

decode()參數(shù)及含義

參數(shù)含義
bytes表示要進(jìn)行轉(zhuǎn)換的二進(jìn)制數(shù)據(jù)。
encoding="utf-8"指定解碼時(shí)采用的字符編碼,默認(rèn)采用 utf-8 格式。當(dāng)方法中只使用這一個(gè)參數(shù)時(shí),可以省略“encoding=”,直接寫編碼方式即可。

注意,對 bytes 類型數(shù)據(jù)解碼,要選擇和當(dāng)初編碼時(shí)一樣的格式。
errors = "strict"指定錯(cuò)誤處理方式,其可選擇值可以是:
  • strict:遇到非法字符就拋出異常。
  • ignore:忽略非法字符。
  • replace:用“?”替換非法字符。
  • xmlcharrefreplace:使用 xml 的字符引用。
該參數(shù)的默認(rèn)值為 strict。

encode方法同樣有兩個(gè)參數(shù),encoding默認(rèn)是用'utf-8'編碼進(jìn)行轉(zhuǎn)換

 |  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"])

注意,格式中用 [] 括起來的參數(shù)為可選參數(shù),也就是說,在使用此方法時(shí),可以使用 [] 中的參數(shù),也可以不使用。 

encode()參數(shù)及含義

參數(shù)含義
str表示要進(jìn)行轉(zhuǎn)換的字符串。
encoding = "utf-8"指定進(jìn)行編碼時(shí)采用的字符編碼,該選項(xiàng)默認(rèn)采用 utf-8 編碼。例如,如果想使用簡體中文,可以設(shè)置 gb2312。

當(dāng)方法中只使用這一個(gè)參數(shù)時(shí),可以省略前邊的“encoding=”,直接寫編碼格式,例如 str.encode("UTF-8")。
errors = "strict"指定錯(cuò)誤處理方式,其可選擇值可以是:
  • strict:遇到非法字符就拋出異常。
  • ignore:忽略非法字符。
  • replace:用“?”替換非法字符。
  • xmlcharrefreplace:使用 xml 的字符引用。
該參數(shù)的默認(rèn)值為 strict。

4,報(bào)文數(shù)據(jù)包和其他類型的互轉(zhuǎn)

上面的都是鋪墊,本節(jié)將是要重點(diǎn)介紹的內(nèi)容。在用scapy構(gòu)造報(bào)文或者編輯報(bào)文的過程中,常常需要從報(bào)文中提取我們感興趣的內(nèi)容或者將我們改造的數(shù)據(jù)插入到報(bào)文中。這里面就需要用到各種轉(zhuǎn)換。最基本的操作就是將bin十六進(jìn)制(報(bào)文中的數(shù)據(jù),也稱為碼流)轉(zhuǎn)int、轉(zhuǎn)byte、轉(zhuǎn)str。相反插入一段數(shù)據(jù)或者構(gòu)造的數(shù)據(jù)到報(bào)文中,則是將int、byte、str類型轉(zhuǎn)成bin十六進(jìn)制。

下面將對十六進(jìn)制碼流和int、byte、str互轉(zhuǎn)進(jìn)行定義

bin十六進(jìn)制轉(zhuǎn)int將二進(jìn)制文件中的b“\x01\x79”轉(zhuǎn)為“377”的過程。本質(zhì)上講,就是把一個(gè)byte型十六進(jìn)制數(shù),轉(zhuǎn)成十進(jìn)制數(shù)的過程。(注意區(qū)別:int(0x178)時(shí)參數(shù)0x179是16進(jìn)制整型而b’\x01\x79’是byte數(shù)組)
int轉(zhuǎn)bin十六進(jìn)制將“377”轉(zhuǎn)為二進(jìn)制文件中的b“\x01\x79”的過程。本質(zhì)上講,就是把一個(gè)十進(jìn)制數(shù),轉(zhuǎn)成byte型十六進(jìn)制數(shù)的過程。(注意區(qū)別:hex(377)得到的0x179是16進(jìn)制整型而b’\x01\x79’是byte數(shù)組)
bin十六進(jìn)制轉(zhuǎn)byte將二進(jìn)制文件中的b“\x04\xf9\x38\xad\x13\x26”取為b‘04f9381326’的過程。本質(zhì)上講,就是將每個(gè)十六進(jìn)制數(shù)(4bit),轉(zhuǎn)成一個(gè)采用ascii編碼的byte(8bit)的過程
byte轉(zhuǎn)bin十六進(jìn)制將b‘04f9381326’取為二進(jìn)制文件中的b“\x04\xf9\x38\xad\x13\x26”的過程。本質(zhì)上講,就是將每個(gè)采用ascii編碼的byte(8bit),轉(zhuǎn)成一個(gè)十六進(jìn)制數(shù)(4bit)的過程
bin十六進(jìn)制轉(zhuǎn)str將二進(jìn)制文件中b’\x48\x54\x54\x50’取為字符串‘HTTP’的過程。本質(zhì)上講,就是將ascii編碼轉(zhuǎn)成對應(yīng)字符的過程。
str轉(zhuǎn)bin十六進(jìn)制將字符串‘HTTP’取為二進(jìn)制文件中b’\x48\x54\x54\x50’的過程。本質(zhì)上講,字符轉(zhuǎn)成就是對應(yīng)的ascii編碼的過程

4.1 bin十六進(jìn)制與int互轉(zhuǎn)實(shí)現(xiàn)

        bin十六進(jìn)制轉(zhuǎn)int主要在分析二進(jìn)制文件、數(shù)據(jù)包頭時(shí)獲取長度等值時(shí)使用;相反,int轉(zhuǎn)bin十六進(jìn)制就是在構(gòu)造二進(jìn)制文件、數(shù)據(jù)包頭時(shí)寫入長度等值時(shí)使用。

        另外注意把bin十六進(jìn)制當(dāng)數(shù)值時(shí)有大端和小端兩種模式,大端意思是開頭(低地址)權(quán)重大,小端為開頭(低地址)權(quán)重小。文件系統(tǒng)一般用小端模式,網(wǎng)絡(luò)傳輸一般用大端模式。

轉(zhuǎn)換方法說明
int轉(zhuǎn)bin十六進(jìn)制to_bytes(lenght,byteorder)lenght表示轉(zhuǎn)成的多少個(gè)字節(jié);byteorder可為big或little分別表示轉(zhuǎn)bin十六進(jìn)制時(shí)使用大端模式還是小端模式
bin十六進(jìn)制轉(zhuǎn)intint.from_bytes(byte_var,byteorder)byte_var是要轉(zhuǎn)成數(shù)值的變bin十六進(jìn)制變量,byteorder還是一樣可為big或little,分別表示從bin十六進(jìn)制轉(zhuǎn)為數(shù)值時(shí)把bin十六進(jìn)制當(dāng)大端模式還是小端模式處理

舉例:

將端口的對應(yīng)的碼流\xdc\x39轉(zhuǎn)成56377

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

將56377轉(zhuǎn)成碼流\xdc\x39

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

轉(zhuǎn)出來為什么是\xdc9,我們查一下ascii碼表,9對應(yīng)的十六進(jìn)制就是\x39

4.2 bin十六進(jìn)制和byte互轉(zhuǎn)實(shí)現(xiàn)

bin十六進(jìn)制轉(zhuǎn)byte主要在分析二進(jìn)制文件、數(shù)據(jù)包頭時(shí)獲取mac地址、密鑰等平時(shí)就以十六進(jìn)制表示的值時(shí)使用;相反,byte轉(zhuǎn)bin十六進(jìn)制就是在構(gòu)造二進(jìn)制文件、數(shù)據(jù)包頭時(shí)寫入mac地址、密鑰等平時(shí)就以十六進(jìn)制表示的值時(shí)使用。這在用scapy構(gòu)造數(shù)據(jù)包或者轉(zhuǎn)換數(shù)據(jù)包時(shí)會(huì)經(jīng)常用到,這里要用到第三方庫binascii,使用時(shí)需要先導(dǎo)入

轉(zhuǎn)換方法說明
bin十六進(jìn)制轉(zhuǎn)bytebinascii.b2a_hex(bin_var)bin_var為byte變量常從二進(jìn)制文件中讀出; 如binascii.b2a_hex(b’\x04\xf9\x38\xad\x13\x26’)結(jié)果為b’04f9381326‘
byte轉(zhuǎn)bin十六進(jìn)制binascii.a2b_hex(hex_byte_var)hex_byte_var為十六進(jìn)制字節(jié)串; 如binascii.a2b_hex(b’04f9381326’)結(jié)果為b’\x04\xf98\x13&’(8對應(yīng)的ascii編碼是38,&對應(yīng)的ascii編碼是26)

舉例:

>>> import binascii
>>> binascii.b2a_hex(b'\x48\x6f\x73\x74\x3a\x20\x63') #bin十六進(jìn)制轉(zhuǎn)byte
b'486f73743a2063'
>>>
>>> binascii.a2b_hex(b'486f73743a2063') #byte轉(zhuǎn)bin十六進(jìn)制
b'Host: c'
>>>

實(shí)際使用中我們經(jīng)常會(huì)構(gòu)造十六進(jìn)制碼流,然后將碼流格式化成byte型,最后將byte轉(zhuǎn)成bin十六進(jìn)制

4.3 bin十六進(jìn)制與str互轉(zhuǎn)

bin十六進(jìn)制轉(zhuǎn)主要在分析二進(jìn)制文件、數(shù)據(jù)包頭時(shí)獲取其量的字符串時(shí)使用;相反,byte轉(zhuǎn)bin十六進(jìn)制就是在構(gòu)造二進(jìn)制文件、數(shù)據(jù)包頭時(shí)寫入字符串時(shí)使用。

bin十六進(jìn)制與str互轉(zhuǎn)其實(shí)就是字符串和byte互轉(zhuǎn);此處的bin十六進(jìn)制就是byte的本質(zhì)。(b’\x48\x54\x54\x50’和b’HTTP’在內(nèi)存中是一模一樣的)

轉(zhuǎn)換方法說明
bin十六進(jìn)制轉(zhuǎn)strdecode在第3節(jié)中有詳細(xì)介紹
str轉(zhuǎn)bin十六進(jìn)制encode在第3節(jié)中有詳細(xì)介紹

舉例:

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

到此這篇關(guān)于Python常見類型轉(zhuǎn)換的小結(jié)的文章就介紹到這了,更多相關(guān)Python常見類型轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python使用Selenium WebDriver的入門介紹及安裝教程(最新推薦)

    Python使用Selenium WebDriver的入門介紹及安裝教程(最新推薦)

    這篇文章主要介紹了Python使用Selenium WebDriver的入門介紹及安裝教程,本文使用環(huán)境為python3.11+win10 64位+firefox瀏覽器,所以本文使用的瀏覽器驅(qū)動(dòng)是Firefox的geckodriver ,如果你使用的是其他瀏覽器,那么選擇自己對應(yīng)的瀏覽器驅(qū)動(dòng)程序即可,需要的朋友可以參考下
    2023-04-04
  • python如何生成密碼字典

    python如何生成密碼字典

    這篇文章主要介紹了python如何生成密碼字典,密碼字典主要是配合解密使用,下面利用python實(shí)現(xiàn)生成密碼字典,需要的小伙伴可以參考一下
    2022-03-03
  • Python實(shí)現(xiàn)檢測SSL證書是否過期

    Python實(shí)現(xiàn)檢測SSL證書是否過期

    我們知道 SSL 證書是會(huì)過期的,一旦過期之后需要重新申請,如果沒有及時(shí)更換證書的話,就有可能導(dǎo)致網(wǎng)站出問題,所以本文介紹了如何利用Python實(shí)現(xiàn)檢測SSL證書是否過期,需要的可以參考下
    2023-08-08
  • numpy找出array中的最大值,最小值實(shí)例

    numpy找出array中的最大值,最小值實(shí)例

    下面小編就為大家分享一篇numpy找出array中的最大值,最小值實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 關(guān)于Python字符編碼與二進(jìn)制不得不說的一些事

    關(guān)于Python字符編碼與二進(jìn)制不得不說的一些事

    這篇文章主要給大家介紹了關(guān)于Python字符編碼與二進(jìn)制不得不說的一些事,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Python算法模塊之hashlib模塊詳解

    Python算法模塊之hashlib模塊詳解

    這篇文章主要介紹了Python算法模塊之hashlib模塊詳解,hash是一種算法,不同的hash算法只是復(fù)雜度不一樣,該算法接受傳入的內(nèi)容,經(jīng)過運(yùn)算得到一串hash值,本文提供了部分實(shí)例代碼方便理解,需要的朋友可以參考下
    2023-08-08
  • python實(shí)現(xiàn)微信打飛機(jī)游戲

    python實(shí)現(xiàn)微信打飛機(jī)游戲

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)微信打飛機(jī)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 使用tensorflow DataSet實(shí)現(xiàn)高效加載變長文本輸入

    使用tensorflow DataSet實(shí)現(xiàn)高效加載變長文本輸入

    今天小編就為大家分享一篇使用tensorflow DataSet實(shí)現(xiàn)高效加載變長文本輸入,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python多圖片合并PDF的方法

    Python多圖片合并PDF的方法

    今天小編就為大家分享一篇關(guān)于Python多圖片合并PDF的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • python的函數(shù)和方法(上)

    python的函數(shù)和方法(上)

    這篇文章主要為大家詳細(xì)介紹了python的函數(shù)和方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11

最新評論