【问题标题】:Bit-operations on large number of bytes大量字节的位操作
【发布时间】:2011-07-09 21:28:28
【问题描述】:

用简单的文件加密/解密做一些练习,目前只是读取一堆字节并一次对每个字节执行适当的位操作,然后将它们写入输出文件。

这种方法看起来很慢。例如,如果我想对每个字节进行 0xFF 异或运算,我会遍历每个字节并按 0xFF 进行异或运算,而不是做一些魔术,然后快速对每个字节进行异或运算。

有没有更好的方法来执行位操作而不是一次执行一个字节?

【问题讨论】:

  • 你现在如何存储字节?作为整数列表?除非你有超过十几个 MB,否则字节表示不太可能是减速的根源。在推测之前先测量(即配置文件)。
  • 您确定标签应该是加密/解密吗?我在您的问题中没有看到任何加密操作...

标签: python encryption bitwise-operators


【解决方案1】:

使用来自numpybitwise array operations 可能是您想要的。

【讨论】:

    【解决方案2】:

    无论如何,似乎每个字节都必须是

    • 从内存中读取,
    • 以某种方式修改,并且
    • 写回内存。

    您可以通过一次对多个字节进行操作节省一点时间(不是双关语),例如对 4 个甚至 8 个字节的整数执行 XOR 操作,从而将与循环管理相关的开销大约是 4 或 8 倍,但这种改进可能不会为整个算法带来显着的收益。

    通过读取表格中的预计算值来替换 CPU/语言的“本机”位操作(XOR、移位、旋转等),可以找到其他改进。但是请注意,这些本地操作通常是相当优化的,您必须非常努力地在外部设计等效操作,并精确测量这些操作的相对性能。

    编辑:糟糕,我刚刚注意到 [Python] 标记,以及另一个响应中对 numpy 的引用。
    当心...虽然 Numpy 按位数组的建议是合理的,但这完全取决于手头问题的实际参数。例如,在排列 numpy 的按位函数隐含的底层数组时,可能会浪费大量时间。 请参阅此Stack Overflow question,这似乎很相关。虽然专注于 XOR 操作,但这个问题为改进循环等和一般分析提供了很多可操作的提示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-22
      • 2011-10-14
      • 2015-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      相关资源
      最近更新 更多