摘自convert a string of bytes into an int (python) - Stack Overflow
需求:将形如'y\xcc\xa6\xbb'的byte字符串转化为integer
方法 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 |
ps: CSDN的markdown编辑器好难用,写到页面底端就换行错乱,跳字符。
python int 转byte,byte转int
1
2
3
4
|
data_byte1 = int ( 1324 ).to_bytes(length = 2 , byteorder = 'big' , signed = True ) #int(参数):参数代表要被转换的数字 #length=2:代表要转换成几个字节 #byteorder='big'代表高位在前,相反little |
1
2
|
data_byte2 = int ().from_bytes(data_byte1, byteorder = 'big' , signed = True ) print (data_byte1) print (data_byte2) |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/yinxingsha/article/details/52953853