在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,所以我們不能在 中拼接字串和位元組包 當然字串和位元組,是可以被相互轉換的。借用乙個其他的圖來說明轉換關係 ...