Python3中bytes和HexStr之間的轉換

2021-08-10 05:49:16 字數 1566 閱讀 2961

在python運算元據內容時,多數情況下可能遇到下面3種型別的資料處理:

hexstring 如:'1c532145697a8b6f'

str 如:'\x1c\x53\x21\x45\x69\x7a\x8b\x6f'

list 如:[0x1c, 0x53, 0x21, 0x45, 0x69, 0x7a, 0x8b, 0x6f]

各種第三方模組(如pydes),或者自己寫的介面中,可能存在由於型別不統一需要在這3種資料中來回切換的情況。

需要用到的核心的方法如下:

list() 將物件轉換為list

str() 將物件轉換為str

bytearray() 將物件轉換為bytearray

bytearray.fromhex() 將物件從hexstring轉換為bytearray

binascii.b2a_hex() 將物件從str轉換為hexstring

如:[0x53, 0x21, 0x6a] -> '\x53\x21\x6a'

方法:list -> bytearray -> str

[python]

view plain

copy

x = [

0x53

, 0x21

, 0x6a

]  y = str(bytearray(x))  

如:'\x53\x21\6a' -> [0x53, 0x21, 0x6a]

方法:逐個字元轉成十進位制

[python]

view plain

copy

x = 

'\x53\x21\x6a'

y = [ord(c) for

c in

x]  

如: [0x53, 0x21, 0x6a] -> '53216a'

方法:list -> bytearray -> str -> hexstring

[python]

view plain

copy

import

binascii  

x = [0x53

, 0x21

, 0x6a

]  y = str(bytearray(x))  

z = binascii.b2a_hex(y)  

如: '53216a' -> [0x53, 0x21, 0x6a]

方法:hexstring -> bytearray -> list

[python]

view plain

copy

x = 

'53216a'

y = bytearray.fromhex(x)  

z = list(y)  

如: '53216a' -> '\x53\x21\x6a'

方法:hexstring -> bytearray -> str

[python]

view plain

copy

x = 

'53216a'

y = bytearray.fromhex(x)  

z = str(y)  

python3 中bytes和str型別

轉 python 3最重要的新特性之一是對字串和二進位制資料流做了明確的區分。文字總是unicode,由str型別表示,二進位制資料則由bytes型別表示。python 3不會以任意隱式的方式混用str和bytes,你不能拼接字串和位元組流,也無法在位元組流裡搜尋字串 反之亦然 也不能將字串傳入引數...

Python3中的bytes和str型別

python 3最重要的新特性之一是對字串和二進位制資料流做了明確的區分。文字總是unicode,由str型別表示,二進位制資料則由bytes型別表示。python 3不會以任意隱式的方式混用str和bytes,你不能拼接字串和位元組流,也無法在位元組流裡搜尋字串 反之亦然 也不能將字串傳入引數為位...

Python3中的Bytes和str之間的關係

文字總是unicode字符集,用str型別表示。二進位制資料則由bytes表示。通過socket在網路上傳輸資料時必須要用二進位制格式 python不會以任何隱式的方式混用str和bytes,所以我們不能在 中拼接字串和位元組包 當然字串和位元組,是可以被相互轉換的。借用乙個其他的圖來說明轉換關係 ...