需求:将形如’y\xcc\xa6\xbb’
的byte
字符串转化为integer
或者string
方法1 导入struct
包
1 2 |
import struct struct.unpack("<L", "y\xcc\xa6\xbb")[0] |
方法2 python3.2
及以上
若byte
串采取大端法:
1 |
int.from_bytes(b'y\xcc\xa6\xbb', byteorder='big') |
若采取小端法,则:
1 |
int.from_bytes(b'y\xcc\xa6\xbb', byteorder='little') |
方法3 借助十六进制转换
大端法:
1 2 |
s = 'y\xcc\xa6\xbb' num = int(s.encode('hex'), 16) |
小端法:
1 |
int(''.join(reversed(s)).encode('hex'), 16) |
方法4 使用array
包
1 2 |
import array integerValue = array.array("I", 'y\xcc\xa6\xbb')[0] |
其中I
用于表示大端或小端,且使用此方法要注意自己使用的python
版本。
方法5 自己写函数实现
如:
1 |
sum(ord(c) << (i * 8) for i, c in enumerate('y\xcc\xa6\xbb'[::-1])) |
又如:
1 2 3 4 5 6 |
def bytes2int( tb, order='big'): if order == 'big': seq=[0,1,2,3] elif order == 'little': seq=[3,2,1,0] i = 0 for j in seq: i = (i<<8)+tb[j] return i |
字符数组转换成字符串
1 2 3 |
>>> import array >>> array.array('B', [17, 24, 121, 1, 12, 222, 34, 76]).tostring() '\x11\x18y\x01\x0c\xde"L' |