如何在Python中使用实际位进行编码?
我用Python构建了一个huffman编码器,但是因为我将位(代表字符)存储为字符串,所以编码的文本比原始文本大。如何使用实际位正确压缩文本?您可以将1s和0s的如何在Python中使用实际位进行编码?,python,compression,bits,huffman-code,encoder,Python,Compression,Bits,Huffman Code,Encoder,我用Python构建了一个huffman编码器,但是因为我将位(代表字符)存储为字符串,所以编码的文本比原始文本大。如何使用实际位正确压缩文本?您可以将1s和0s的str转换为int类型变量,如下所示: >>> int('10110001',2) 177 >>> format(177,'b') '10110001' >>> foo = 0b10110001 >>> foo 177 您可以将ints转换回strs的1s和
str
转换为int
类型变量,如下所示:
>>> int('10110001',2)
177
>>> format(177,'b')
'10110001'
>>> foo = 0b10110001
>>> foo
177
您可以将int
s转换回str
s的1s和0s,如下所示:
>>> int('10110001',2)
177
>>> format(177,'b')
'10110001'
>>> foo = 0b10110001
>>> foo
177
另外,请注意,您可以使用前导的0b
以二进制形式编写int
文本,如下所示:
>>> int('10110001',2)
177
>>> format(177,'b')
'10110001'
>>> foo = 0b10110001
>>> foo
177
现在,在你说“不,我要的是比特,不是整数”之前,先想一想。int
变量不作为数字的10进制表示形式存储在计算机硬件中;它直接存储为位
编辑:Stefan Pochmann指出,这将删除前导零。考虑:
>>> code = '000010110001'
>>> bitcode = int(code, 2)
>>> format(bitcode, 'b')
'10110001'
那么如何保持前导零呢?有几种方法。如何操作可能取决于您是想先将每个字符键入强制转换为int
,然后将它们连接起来,还是在键入强制转换为int
之前将1和0的字符串连接起来。后者可能要简单得多。对于后者来说,一种有效的方法是存储代码的长度,然后将其与以下语法一起使用:
>>> format(bitcode, '012b')
'000010110001'
其中'012b'
告诉格式化函数在字符串的左侧填充足够的零,以确保最小长度为12。因此,您可以这样使用它:
>>> code = '000010110001'
>>> code_length = len(code)
>>> bitcode = int(code, 2)
>>> format(bitcode, '0{}b'.format(code_length))
'000010110001'
最后,如果您不熟悉该
{}
和第二种格式,请继续阅读。欢迎来到StackOverflow。请阅读并遵循帮助文档中的发布指南。在这里申请。StackOverflow不是设计、编码、研究或教程服务。Python有内置的位操作;你在哪里遇到了这些问题?如果字符串以零开头,那么你就会丢失它们。大多数字符串都是以0开头的-我该如何解决这个问题?