python 数据处理二进制_在Python中处理字节和二进制数据

使用bitarray module,对于大数字,您可以更快地执行此操作:

基准(2.4倍加速!)以下内容:janus@Zeus /tmp % python3 -m timeit -s "import tst" "tst.tst(10000)"

10 loops, best of 3: 251 msec per loop

janus@Zeus /tmp % python3 -m timeit -s "import tst" "tst.tst(100)"

1000 loops, best of 3: 700 usec per loop

janus@Zeus /tmp % python3 -m timeit -s "import sevenbittoint, os" "sevenbittoint.sevenbittoint(os.urandom(10000))"

10 loops, best of 3: 73.7 msec per loop

janus@Zeus /tmp % python3 -m timeit -s "import quick, os" "quick.quick(os.urandom(10000))"

10 loops, best of 3: 179 msec per loop

quick.py(来自Mark Byers):def quick(bites):

i = 0

for b in bites:

i <<= 7

i += (b & 0x7f)

#i += b

return i

七点.py:import bitarray

import functools

def inttobitarray(x):

a = bitarray.bitarray()

a.frombytes(x.to_bytes(1,'big'))

return a

def concatter(accumulator,thisitem):

thisitem.pop(0)

for i in thisitem.tolist():

accumulator.append(i)

return accumulator

def sevenbittoint(bajts):

concatted = functools.reduce(concatter, map(inttobitarray, bajts), bitarray.bitarray())

missingbits = 8 - len(concatted) % 8

for i in range(missingbits): concatted.insert(0,0) # zeropad

return int.from_bytes(concatted.tobytes(), byteorder='big')

def tst():

num = 32768

print(bin(num))

print(sevenbittoint(num.to_bytes(2,'big')))

if __name__ == "__main__":

tst()

tst.py公司:import os

import quick

import sevenbittoint

def tst(sz):

bajts = os.urandom(sz)

#for i in range(pow(2,16)):

# if i % pow(2,12) == 0: print(i)

# bajts = i.to_bytes(2, 'big')

a = quick.quick(bajts)

b = sevenbittoint.sevenbittoint(bajts)

if a != b: raise Exception((i, bin(int.from_bytes(bajts,'big')), a, b))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值