快速将bytes转换为int的方法

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

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

import numpy as np
import timea = 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,数量越大二者相差越大。说明:
本人用固态硬盘,如果是机械硬盘不知道结果会怎样,家里没有机械硬盘,有机会再验证。`

python中将bytes转换为int一种方法相关推荐

  1. python怎么将字符串变成int,如何在Python中将字符串转换为int?

    我的小示例应用程序的输出如下: Welcome to the Calculator! Please choose what you'd like to do: 0: Addition 1: Subtr ...

  2. python中float转int_在python中将float转换为int的有效方式是什么?

    用时间测试: $bin/python -mtimeit -n10000000 -s 'n = 1.345' 'int(n)' 10000000 loops, best of 3: 0.234 usec ...

  3. 如何在Java中将String转换为int?

    如何在Java中将String转换为int ? 我的字符串仅包含数字,我想返回它代表的数字. 例如,给定字符串"1234" ,结果应为数字1234 . #1楼 好吧,要考虑的一个非 ...

  4. 如何在Java中将String转换为int

    在本教程中,我们将看到将Java中的String转换为int(或Integer)的各种方法. 您可以使用以下任何一种方式: –使用Integer.parseInt(string) –使用Integer ...

  5. python数字形式转换_在Python中将字母转换为数字

    在Python中将字母转换为数字 如何完成以下步骤? characters = ['a''b''c''d''e''f''g''h''i''j''k''l''m''n''o''p''q''r''t''u ...

  6. 在C ++中将字符串转换为int

    In this article, we will look at how we can convert a string to int in C++. Often, we may need to co ...

  7. 如何在Java中将double转换为int?

    在本文中,我们将看到如何将double转换为int. 在Java编程中,您将有一个double原语值(例如82.14),但是要执行进一步的操作,您需要一个int值(例如82),所以让我们看看如何在Ja ...

  8. python取整的几种方法,Python中取整的几种方法小结

    Python中取整的几种方法小结 前言 对每位程序员来说,在编程过程中数据处理是不可避免的,很多时候都需要根据需求把获取到的数据进行处理,取整则是最基本的数据处理.取整的方式则包括向下取整.四舍五入. ...

  9. python十进制小数转二进制小数,从零开始学Python|如何在Python中将小数转换为二进制...

    Python是一种高度通用且功能强大的编程语言.在可以做的许多事情中,从十进制转换为二进制,反之亦然,这是最突出的一项.因此,在本文中,我们将更多地讨论如何在Python中将十进制转换为二进制,反之亦 ...

最新文章

  1. 集成git怎样更新代码_持续集成之理论篇
  2. [Java] 实验4參考代码
  3. TCL with SNPS llengthlappendget_cellsget_ports
  4. java遍历文件目录
  5. PHP-什么是PHP?为什么用PHP?有谁在用PHP?
  6. 用offset调用文章
  7. 【QGIS入门实战精品教程】9.1:QGIS构建泰森多边形(Thiessen Polygon)实例精解
  8. java怎么调用7zip进行压缩_JAVA使用7-zip解压缩带密码的Zip文件(非Proccess方法)...
  9. springboot项目访问不到controller方法。
  10. Java基础之面向对象的特征。
  11. 解决listview与scroll冲突,自定义listview高度
  12. 第四章 jQuery文档处理
  13. day48 Pyhton 数据库Mysql 05
  14. 渗透测试为什么要重基础、重实践?
  15. Linux系统软件安装
  16. 跨浏览器书签导入实例演示,更好的管理书签!
  17. 个人网站、公众号申请微信个人支付接口
  18. Flutter问题记录 - Unable to find bundled Java version
  19. WPS 两个 word 合并
  20. spotify能免费下歌吗_Spotify免费版与高级版:值得升级吗?

热门文章

  1. 刘晓燕英语语法句型学习总结4之状语从句
  2. JavaComplier的使用
  3. 使用alibaba的easyexcel填充复杂模板,导出Excel,返回文件流
  4. java中的锁(一)(锁的介绍)
  5. java写字板_基于JAVA模拟写字板程序的设计与实现
  6. 运维篇(二):git hooks之pre-receive脚本校验日志格式
  7. python glob库的使用
  8. Python基础学习笔记——设计一个名为MyRectangle的矩形类来表示矩形
  9. 2008服务器 自动删除文件,windows-server-2008 – 尝试删除存储在Windows服务器上的目录,在Mac上,包含在Mac上创建的文件,获取“目录不为空”...
  10. Asterisk 电话落地的几种途径,ET263设置