gpt4 book ai didi

python - 有没有更好的方法在 python 中从十进制转换为二进制?

转载 作者:太空宇宙 更新时间:2023-11-03 13:06:07 26 4
gpt4 key购买 nike

我需要将一个整数转换为一个大小为 8 的列表,该列表是该数字(数字 <= 255)的二进制表示形式,然后返回。目前我正在使用这些线路

list(bin(my_num)[2:].rjust(8,'0'))
int("".join(my_list),2)

我用谷歌搜索了一下,但很难找到相关信息。我只是很好奇是否有更快或更标准的方法来执行此操作。

编辑:使用位掩码会使它更快。例如。像这样

[(my_num>>y)&1 for y in xrange(7,-1,-1)]

就像我在评论中提到的那样,我将它用于我正在编写的隐写术应用程序,所以我这样做了数千次(图像中每个像素 3 次),所以速度很好。

最佳答案

在 Python 2.6 或更新版本中,使用 format syntax :

'{0:0=#10b}'.format(my_num)[2:]
# '00001010'

Python 字符串的优点之一是它们是序列。如果您需要做的只是遍历字符,则无需将字符串转换为列表。

编辑:对于隐写术,您可能对将字符流转换为比特流感兴趣。以下是使用生成器可以做到这一点的方法:

def str2bits(astr):
for char in astr:
n=ord(char)
for bit in '{0:0=#10b}'.format(n)[2:]:
yield int(bit)

并将比特流转换回字符流:

def grouper(n, iterable, fillvalue=None):
# Source: http://docs.python.org/library/itertools.html#recipes
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
return itertools.izip_longest(*[iter(iterable)]*n,fillvalue=fillvalue)

def bits2str(bits):
for b in grouper(8,bits):
yield chr(int(''.join(map(str,b)),2))

例如,你可以像这样使用上面的函数:

for b in str2bits('Hi Zvarberg'):
print b,
# 0 1 0 0 1 0 0 0 0 1 1 0 1 0 0 1 0 0 1 0 0 0 0 0 0 1 0 1 1 0 1 0 0 1 1 1 0 1 1 0 0 1 1 0 0 0 0 1 0 1 1 1 0 0 1 0 0 1 1 0 0 0 1 0 0 1 1 0 0 1 0 1 0 1 1 1 0 0 1 0 0 1 1 0 0 1 1 1

# To show bits2str is the inverse of str2bits:
print ''.join([c for c in bits2str(str2bits('Hi Zvarberg'))])
# Hi Zvarberg

此外,SO 大师 Ned Batchelder使用 Python 和 PIL 做一些与隐写术相关的实验 here .您或许可以在那里找到一些有用的代码。

如果您发现需要更快的速度(并且仍想用 Python 编写代码),您可能需要考虑使用 numpy .

关于python - 有没有更好的方法在 python 中从十进制转换为二进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2192658/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com