我需要将整数转换为大小为8的列表,即该数字的二进制表示(number〈= 255),然后再转换回来。
list(bin(my_num)[2:].rjust(8,'0'))
int("".join(my_list),2)
我搜索了一下,但是很难找到相关的信息。我只是好奇是否有更快或更标准的方法来做到这一点。
**edit:**使用位屏蔽是否会使其更快。例如,类似于以下内容
第一个月
就像我在评论中提到的,我正在为我正在编写的一个隐写应用程序使用这个,所以我正在这样做数千次(图像中每个像素3次),所以速度不错。
5条答案
按热度按时间gzszwxb41#
在Python 2.6或更新版本中,使用
format
语法:Python字符串的一个优点是它们是序列,如果你只需要遍历字符,那么就没有必要把字符串转换成列表。
编辑:对于隐写术,你可能会对将字符流转换成比特流感兴趣。下面是你如何使用生成器来完成这一任务:
并将位流转换回字符流:
例如,您可以按如下方式使用上述函数:
此外,SO大师Ned Batchelder使用Python和PIL here做了一些与隐写术相关的实验,您可能会在那里找到一些有用的代码。
如果您发现需要更快的速度(并且仍然希望用Python编写代码),您可能希望考虑使用numpy。
kt06eoxx2#
您可以使用
zfill
代替rjust
。tv6aics13#
下面是十进制到二进制转换的一种方法:
可编码为:
2skhul334#
我在这里给出了十进制到二进制转换的程序.
vecaoik15#
第一种溶液:
快速方法不能使用循环。
我建议使用一个查找表,您可以构建一次,并根据需要经常使用。
第二种溶液:
但是如果你真的很在乎速度,你就不应该使用字符,你应该用字节数组(它是可变的)来加载你的图像,然后直接修改像素中的位。