当前位置 博文首页 > Python实现byte转integer

    Python实现byte转integer

    作者:Silbera 时间:2021-08-11 18:33

    摘自convert a string of bytes into an int (python) - Stack Overflow

    需求:将形如'y\xcc\xa6\xbb'的byte字符串转化为integer

    方法 1 导入struct包

    import struct
    struct.unpack("<L", "y\xcc\xa6\xbb")[0]

    方法 2 python3.2及以上

    若byte串采取大端法:

    int.from_bytes(b'y\xcc\xa6\xbb', byteorder='big')

    若采取小端法,则:

    int.from_bytes(b'y\xcc\xa6\xbb', byteorder='little')

    方法3 借助十六进制转换

    大端法:

    s = 'y\xcc\xa6\xbb'
    num = int(s.encode('hex'), 16)

    小端法:

    int(''.join(reversed(s)).encode('hex'), 16)

    方法4 使用array包

    import array
    integerValue = array.array("I", 'y\xcc\xa6\xbb')[0]

    其中I用于表示大端或小端,且使用此方法要注意自己使用的python版本。

    方法5 自己写函数实现

    如:

    sum(ord(c) << (i * 8) for i, c in enumerate('y\xcc\xa6\xbb'[::-1]))

    又如:

    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

    data_byte1 = int(1324).to_bytes(length=2, byteorder='big', signed=True)
    #int(参数):参数代表要被转换的数字
    #length=2:代表要转换成几个字节
    #byteorder='big'代表高位在前,相反little
    data_byte2 = int().from_bytes(data_byte1, byteorder='big', signed=True)
    print(data_byte1) print(data_byte2)
    

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持站长博客。

    jsjbwy
    下一篇:没有了