python中将bytes转换为int一种方法

快速将bytes转换为int的方法

项目上需要快速将网络接收的bytes数据转换为16bit 整形数,网上查过很多资料,一般都是用int.from_bytes函数实现,实验发现,这个函数进行大批量转换时很慢,怎样能加快转换速度呢?

想到用numpy的tofile函数将bytes存入文件,再用fromfile函数将数据从文件中读出,经测试可行,时间缩短很多,数据量越大节约的时间越多,分享给大家。

import numpy as np
import time

a = bytes([0x1a, 0x2b, 0x3c, 0x4d, 0x5e, 0x6f, 0x7a, 0x8b]) * 8192

##  方法一:先写入文件,再按格式读出
t1 = time.perf_counter()
c = np.array(a)
with open('data.dat', 'wb+') as fs:
    c.tofile('data.dat')
    b1 = np.fromfile('data.dat', dtype=np.int16)
t2 = time.perf_counter()
print("方法一耗时:  %.2f ms" % ((t2 - t1)*1000))

###  方法二:用int.from_byes函数转换
t1 = time.perf_counter()
len = int(len(a) / 2)
b2 = []
for i in range(len):
    data = int.from_bytes([a[2 * i],a[2 * i + 1]], 'little', signed=True)
    b2.append(data)
t2 = time.perf_counter()
print("方法二耗时:  %.2f ms" % ((t2 - t1)*1000))


###  检验两种方法是否一致

b2=np.array(b2)
print("b1  : ",b1, type(b1))
print("b2  : ",b2, type(b2))
for i in range(len):
    if b1[i] != b2[i]:
        print("b1[%d] != b2[%d]" %(i,i))


测试结果:

方法一耗时:  1.59 ms
方法二耗时:  28.02 ms
b1  :  [ 11034  19772  28510 ...  19772  28510 -29830] <class 'numpy.ndarray'>
b2  :  [ 11034  19772  28510 ...  19772  28510 -29830] <class 'numpy.ndarray'>
``
在bytes大小为8192*8时,用文件写入法耗时1.59ms,用函数法28ms,数量越大二者相差越大。

说明:
本人用固态硬盘,如果是机械硬盘不知道结果会怎样,家里没有机械硬盘,有机会再验证。`

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值