返回顶部
首页 > 资讯 > 后端开发 > Python >如何解决python3 整数数组转bytes的效率
  • 798
分享到

如何解决python3 整数数组转bytes的效率

2023-06-07 23:06:54 798人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

本篇内容主要讲解“如何解决python3 整数数组转bytes的效率”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决python3 整数数组转bytes的效率”吧!昨天在做一道CTF题的时

本篇内容主要讲解“如何解决python3 整数数组转bytes的效率”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决python3 整数数组转bytes的效率”吧!

昨天在做一道CTF题的时候碰到了一个图片异或的问题,操作大概如下:

将一个图片读入,然后每字节进行异或操作,核心代码可简化为以下:

#coding:utf-8''' @DateTime: 2017-11-25 13:51:33 @Version: 1.0 @Author: Unname_Bao'''import sixkey = b'\xdcd~\xb6^g\x11\xe1U7R\x18!+9d\xdcd~\xb6^g\x11\xe1U7R\x18!+9d'with open('flag.encrypted','rb') as f: c = f.read()flag = b''for i in range(32): flag += six.int2byte(key[i%32]^c[i])with open('flag.png','wb') as f: f.write(flag)

然后就碰到了一个效率问题,跑了十几分钟都没有跑出结果,起初以为是类型转换的问题,因为比较急,于是换了成了c++的代码去解决,后来一直没多想。

今天闲下来的时候才发现代码之前的代码中存在一个非常大的问题:

内存申请问题

由于flag.encrypted文件大小为6.47MB之大,由于我的脚本思路是不断在byte数组后添加,但忽略了其本质。

就是在内存申请过程中,由于数组长度最终为600+W大小,期间存在多次数组内存不够,需要重新申请内存的问题,而Python中的内存申请显然没有C++的vector的push_back有效率。

而且python中,无论是list、string还是byte,也没有reserve这种函数,不能预留内存空间(这时候真的要吐槽一下python设计者对速度优化的考量了)。

于是只能用另一种方法进行优化,就是先用list申请一个需求大小的内存空间,然后再转为bytes使用,

代码如下:

#coding:utf-8''' @DateTime: 2017-11-26 14:09:29 @Version: 2.0 @Author: Unname_Bao'''key = b'\xdcd~\xb6^g\x11\xe1U7R\x18!+9d\xdcd~\xb6^g\x11\xe1U7R\x18!+9d'with open('flag.encrypted','rb') as f: c = f.read()flag = list('1'*len(c))for i in range(len(c)): flag[i] = key[i%32]^c[i]flag = bytes(flag)with open('flag.png','wb') as f: f.write(flag)

这样写的话几乎是瞬间完成任务了,但还是比C++慢很多,这是不可避免的。

补充:python2与python3的bytes问题

>>> s = '编程'>>> print s编程>>> s'\xe7\xbc\x96\xe7\xa8\x8b'>>>

在python2中直接调用字符串的变量的话,会打印其bytes(可以理解成用16进制表示字符串的内存地址,本质还是二进制)。在python2中,bytes和str是一回事。

为什么要有个bytes呢?因为所有数据本质都是用二进制进行储存的,当传输数据的时候,要把这些数据先转换成二进制( bytes)在进行传输。除此之外,python2里还有个单独的数据类型,把字符串解码后,就会变成unicode。

>>> s'\xe8\xb7\xaf\xe9\xa3\x9e' #utf-8>>> s.decode('utf-8')u'\u8def\u98de' #unicode 在unicode编码表里对应的位置>>> print(s.decode('utf-8'))路飞 #unicode 格式的字符

原因是python2的默认编码是ASCII,后来为了支持多国语言,就想弄个unicode。但是直接把ASCII转成unicode是很费劲的,所以龟叔直接搞了一个新的字符类型,就叫unicode,说白了就是你得在内存里先把字符串存成unicode类型

2008年python3出世,来了个大变革:

把字符串的编码变成了unicode,文件默认编码变成了utf-8。

把str 和bytes 做了明确区分, str 就是unicode格式的字符, bytes就是单纯二进制还有一个很重要的是,在python3中,只有unicode给你展示字形,其他的编码一律用bytes展示,也就是说要你强制使用unicode。

最后再提示一下,Python只要出现各种编码问题,无非是哪里的编码设置出错了

常见编码错误的原因有:

Python解释器的默认编码

Python源文件文件编码

Terminal使用的编码

操作系统的语言设置

到此,相信大家对“如何解决python3 整数数组转bytes的效率”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 如何解决python3 整数数组转bytes的效率

本文链接: https://lsjlt.com/news/250397.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何解决python3 整数数组转bytes的效率
    本篇内容主要讲解“如何解决python3 整数数组转bytes的效率”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决python3 整数数组转bytes的效率”吧!昨天在做一道CTF题的时...
    99+
    2023-06-07
  • php整数如何转数组中
    这篇文章主要介绍了php整数如何转数组中,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php整数转数组的方法:首先创建一个PHP示例文件;然后定义一个整数;接着通过“arra...
    99+
    2023-06-14
  • php如何将整数转数组
    这篇文章给大家分享的是有关php如何将整数转数组的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php将整数转数组的方法:首先创建一个PHP示例文件;然后通过“array_map('intval',...
    99+
    2023-06-15
  • 如何解析 JSON 整数数组
    本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《如何解析 JSON 整数数组》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~问题内容我有一个回复:[18...
    99+
    2024-04-04
  • PHP数组合并效率如何比较?
    php 数组合并效率对比:array_merge()、+ 运算符和 array_replace() 这三个方法的时间复杂度均为 o(n),表示合并时间与数组元素数量成正比。这三个方法的空...
    99+
    2024-04-28
    php 数组合并 内存占用
  • C++中vector和数组之间的转换及其效率问题怎么解决
    本文小编为大家详细介绍“C++中vector和数组之间的转换及其效率问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++中vector和数组之间的转换及其效率问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-07-05
  • PHP HTTP数组:如何优化大数据的处理效率?
    随着互联网技术的不断发展,大数据处理已成为企业必不可少的一项技能。在PHP中,HTTP数组是一种常用的数据类型,它能够帮助我们方便地接收和处理客户端提交的数据。但是,当需要处理大量数据时,HTTP数组的效率会变得非常低下,这时就需要优化处...
    99+
    2023-10-09
    http 数组 大数据
  • PHP数组分页中如何优化效率?
    通过以下方法可以优化 php 数组分页:使用切片(slicing)进行分页。优化查询,仅获取所需数据。使用缓存,避免重复查询。采用并行分页,加快处理速度。避免不必要的排序和过滤,减少计算...
    99+
    2024-05-02
    php 数组分页
  • PHP如何将数组元素转为整数类型
    这篇文章主要介绍了PHP如何将数组元素转为整数类型的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇PHP如何将数组元素转为整数类型文章都会有所收获,下面我们一起来看看吧。首先,让我们看一下PHP中的数组。数组是一...
    99+
    2023-07-05
  • 滑动窗口算法高效率解决数组问题
    目录正文算法思路代码实现时间复杂度空间复杂度总结正文 滑动窗口算法是一种可以高效解决数组问题的算法。它通过维护一个固定大小的滑动窗口,来快速计算某些数组的相关指标或者求解一些特定的问...
    99+
    2023-05-20
    数组问题滑动窗口算法 滑动窗口算法
  • 如何在 Python 函数中利用 Linux 数组处理数据的效率?
    在Python中,我们经常需要处理大量的数据。而对于大量数据的处理,数组是一种非常高效的数据结构。如果我们能够在Python函数中利用Linux数组处理数据,那么可以大大提高程序的效率。 本文将介绍如何在Python函数中利用Linux数组...
    99+
    2023-07-20
    函数 linux 数组
  • PHP数组打乱顺序对数组的效率有何影响?
    打乱 php 数组顺序会增加 o(n) 时间复杂度,但不会影响 o(n) 空间复杂度。使用 shuffle() 函数来打乱顺序,但请注意对性能的影响。 PHP 数组打乱顺序对数组效率的...
    99+
    2024-04-30
    效率 php数组
  • 详解PHP数组如何转换为JSON数组
    PHP是一种非常流行的服务器端编程语言,在Web开发中有着广泛的应用。在PHP中,数组是一种非常重要的数据类型,可以用来存储一系列的数据。而JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,也逐渐成...
    99+
    2023-05-14
  • PHP 转换数组键值:不同方案的效率分析
    php 转换数组键值有三种最常用的方案:array_flip() 函数:最快速ksort() 函数:适用于需要排序键的情况自定义迭代器:对于小数组高效 PHP 转换数组键值:不同方案的...
    99+
    2024-05-03
    php 数组键值转换
  • PHP 数组与 Linux Bash:如何优化代码效率?
    在 PHP 和 Linux Bash 中,数组是非常常用的数据结构。它们可以用来存储和操作大量数据,但是如果使用不当,会导致代码效率低下。本文将介绍一些优化技巧来提高 PHP 数组和 Linux Bash 的效率。 一、PHP 数组优化 ...
    99+
    2023-11-02
    数组 linux bash
  • ASP编程算法:如何优化数组同步的效率?
    在ASP开发中,数组是一个非常常见的数据类型。然而,在数组同步这一方面,很多开发者可能会遇到一些效率问题。如何优化数组同步的效率呢?本文将介绍一些常用的方法,帮助你提高数组同步的效率。 使用Redim关键字 在使用数组时,我们需要经常...
    99+
    2023-09-19
    数组 同步 编程算法
  • 如何利用数组提高Java对象编程的效率?
    在Java编程中,对象是非常重要的概念。然而,当处理大量对象时,会导致程序变慢并且占用大量内存。为了解决这些问题,可以使用数组来提高Java对象编程的效率。 数组是一种存储多个相同类型元素的数据结构。在Java中,可以使用数组来存储对象,...
    99+
    2023-10-31
    对象 编程算法 数组
  • Java中数组转字符串的五种方式效率比较
    @Test public void listToString() { ArrayList longList = new ArrayList(); for (int i = 0; i < 10; i++)...
    99+
    2023-09-27
    java 数据结构
  • python字符串数组互转问题如何解决
    这篇文章主要介绍了python字符串数组互转问题如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python字符串数组互转问题如何解决文章都会有所收获,下面我们一起来看看吧。字符串转list数组str&n...
    99+
    2023-07-05
  • PHP缓存数组索引:如何提高代码效率?
    在开发PHP应用程序时,数组是必不可少的数据结构之一。然而,随着数组的不断增大,数组索引的查找时间也会变得越来越长,影响程序的性能。在这种情况下,缓存数组索引是提高代码效率的一种有效方法。 什么是缓存数组索引? 缓存数组索引是指将数组的索...
    99+
    2023-08-06
    缓存 数组 索引
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作