• Python之字节到大整数的打包与解包


    需求:处理一个拥有128位长的16个元素的字节字符串 

    将bytes解析为整数,使用 int.from_bytes() 方法,并像下面这样指定字节顺序:
    # 为了将bytes解析为整数,使用 int.from_bytes() 方法,并像下面这样指定字节顺序:
    data = b'x00x124Vx00xx90xabx00xcdxefx01x00#x004'
    print(len(data))  # 16
    # 如果byteorder为'big',则最重要的字节位于字节数组的开头。 如果byteorder为'little',则最重要的字节位于字节数组的末尾。
    print(int.from_bytes(data,"little"))   # 69120565665751139577663547927094891008
    print(int.from_bytes(data,"big"))  # 94522842520747284487117727783387188
    将一个大整数转换为一个字节字符串,使用 int.to_bytes() 方法,并像下面这样指定字节数和字节顺序:
    x=69120565665751139577663547927094891008
    # 如果byteorder为'big',则最重要的byte位于字节数组的开头。 如果byteorder为'little',则最重要的byte位于字节数组的末尾。
    print(x.to_bytes(16,"little"))   # b'x00x124Vx00xx90xabx00xcdxefx01x00#x004'
    print(x.to_bytes(16,"big"))   # b'4x00#x00x01xefxcdx00xabx90xx00V4x12x00'
    试着将一个整数打包为字节字符串
    x=523**23
    # print(x.to_bytes(16,"little"))   # 报错:OverflowError: int too big to convert
    # 解决:int.bit_length() 方法先判断需要多少字节位来存储这个值
    print(x.bit_length())   # 208  意思是需要208个字节位存储
    nbytes, rem = divmod(x.bit_length(), 8)
    print(nbytes, rem)  # 26,0
    if rem :
        nbytes+=1
    print(nbytes, rem)  # 26,0
    print(x.to_bytes(nbytes,"little"))   # b'x03Xxf1x82iTx96xacxc7cx16xf3xb9xcfx18xeexecx91xd1x98xa2xc8xd9Rxb5xd0'
     
  • 相关阅读:
    DOM优化
    jQuery绑定以及解除时间方法总结,以及事件触发的方法
    javascript的异步编程方法
    innerHTML,innertext ,textcontent,write()
    关于盒子的那些事
    关于HTTP的几种
    关于php中正则匹配包括换行符在内的任意字符的问题总结
    CSS透明属性详解
    Linux下apache日志分析与状态查看方法
    折半排序 (稳定的排序)
  • 原文地址:https://www.cnblogs.com/zzy-9318/p/10472026.html
Copyright © 2020-2023  润新知