python中的字符數字之間的轉換函數
int(x [,base ]) 將x轉換為一個整數
long(x [,base ]) 將x轉換為一個長整數
float(x ) 將x轉換到一個浮點數
complex(real [,imag ]) 創建一個復數
str(x ) 將對象 x 轉換為字符串
repr(x ) 將對象 x 轉換為表達式字符串
eval(str ) 用來計算在字符串中的有效
Python表達式,並返回一個對象
tuple(s ) 將序列 s 轉換為一個元組
list(s ) 將序列 s 轉換為一個列表
chr(x ) 將一個整數轉換為一個字符
unichr(x ) 將一個整數轉換為Unicode字符
ord(x ) 將一個字符轉換為它的整數值
hex(x ) 將一個整數轉換為一個十六進制字符串
oct(x ) 將一個整數轉換為一個八進制字符串
chr(65)='A'
ord('A')=65
int('2')=2;
str(2)='2'
進行協議解析時,總是會遇到各種各樣的數據轉換的問題,從二進制到十進制,從字節串到整數等等 整數之間的進制轉換: 10進制轉16進制: hex(16) ==> 0x10 16進制轉10進制: int('0x10', 16) ==> 16 類似的還有oct(), bin() 字符串轉整數: 10進制字符串: int('10') ==> 10 16進制字符串: int('10', 16) ==> 16 16進制字符串: int('0x10', 16) ==> 16 字節串轉整數: 轉義為short型整數: struct.unpack('<hh', bytes(b'\x01\x00\x00\x00')) ==> (1, 0) 轉義為long型整數: struct.unpack('<L', bytes(b'\x01\x00\x00\x00')) ==> (1,) 整數轉字節串: 轉為兩個字節: struct.pack('<HH', 1,2) ==> b'\x01\x00\x02\x00' 轉為四個字節: struct.pack('<LL', 1,2) ==> b'\x01\x00\x00\x00\x02\x00\x00\x00' 字符串轉字節串: 字符串編碼為字節碼: '12abc'.encode('ascii') ==> b'12abc' 數字或字符數組: bytes([1,2, ord('1'),ord('2')]) ==> b'\x01\x0212' 16進制字符串: bytes().fromhex('010210') ==> b'\x01\x02\x10' 16進制字符串: bytes(map(ord, '\x01\x02\x31\x32')) ==> b'\x01\x0212' 16進制數組: bytes([0x01,0x02,0x31,0x32]) ==> b'\x01\x0212' 字節串轉字符串: 字節碼解碼為字符串: bytes(b'\x31\x32\x61\x62').decode('ascii') ==> 12ab 字節串轉16進制表示,夾帶ascii: str(bytes(b'\x01\x0212'))[2:-1] ==> \x01\x0212 字節串轉16進制表示,固定兩個字符表示: str(binascii.b2a_hex(b'\x01\x0212'))[2:-1] ==> 01023132 字節串轉16進制數組: [hex(x) for x in bytes(b'\x01\x0212')] ==> ['0x1', '0x2', '0x31', '0x32']
內存16進制轉字符串
offset = binascii.unhexlify(offset)
內存中0x416b34 轉為Ak4