python3与python2通用函数:python
int('123456',10) # 转换为指定进制的整数 hex(123456) # 整数转换为16进制串,转换后类型为字符串 bin(123) # 整数转换为2进制串 oct(123) # 整数转换为8进制串
python2专用函数:函数
'abcd'.encode('hex') # 字符串转换为16进制串,对应字符的ascii码 '61626364'.decode('hex') # ascii码转换为对应的字符串
特别注意:python3比python2多了个字节的数据类型
,python3字节专用函数:ui
# 字符串转字节 bytes('str',encoding='utf8') 'str'.encode(encoding='utf8') # 字节转字符串 str(b'byte',encoding='utf8') b'str'.decode(encoding='utf8')
使用第三方库 numpy:code
import numpy as np a = np.int32(0xffffffff) # 会报错,超范围了 b = np.uint32(0xffffffff) print a,b
使用 ctypes 库:内存
from ctypes import * a = c_uint32(0xfffffff).value b = c_int32(0xffffffff).value # 显示为 -1 print a,b
推荐使用ctypes,numpy在超过整数范围时不能强制类型转换
ci
在程序中,输入的多个字符能够被看成一个 WORD 或者 DWORD 甚至 QWORD 的类型进行运算,运算结果放到内存再逐字节取出来!针对这种状况,struct
库能够帮咱们把几个字符打包成一个整数,或者将一个整数解包成几个字符,还能定义大小端模式!简言之,就是能把所使用的数据转换成在内存中存储的形式
字符串
经常使用到的一些格式字符class
b char 1
B uchar 1
h short 2
H ushort 2
i int 4
I uint 4
l long 4
L ulong 4
q longlong 8
Q ulonglong 8
f float 4
d double 8
< 小端模式;> 大端模式;默认小端模式
使用方法:import
from struct import * a = 0x41424344 b = 0x6162 c = 0x66 print pack('<IHb',a,b,c) print unpack('<IHb','DCBAbaf')[0]
在 python2 中有encode('hex')
函数能够快速将字符串转换为对应 ascii 码的16进制数,在 python3 中只有借助binascii
才能实现相似功能!打包
import binascii binascii.hexlify(str) # 字符串转16进制串 binascii.unhexlify(hex_str) # 16进制串转字符串
这个库的强大之处在于:能够直接将任意进制整数转换为字符串
经常使用的一些函数:
# Encoding=UTF-8 from libnum import * s2n(str) # 字符串转整数 n2s(n) # 整数转字符串,任意进制数也能直接转,它会先把任意进制数转成16进制数 s2b(str) # 字符串转2进制位串 b2s(bin) # 2进制位串转字符串