Python 如何解码三进制(或任何不寻常的基)字符串?
对于二进制、四元、八元和十六进制,我很清楚如何将它们流转换为纯文本。有谁能帮我理解我应该如何处理三进制、五进制、元音和其他基数?”这是一个三元的例子,如果有python脚本将不胜感激 到目前为止,我已经尝试: 将每个数字解码为它的二进制对应项,0->00,1->01和2->10 创建由3个字符组成的块,并将它们映射到英语字母表,这些字母表在221->z之前都不起作用:000->a,001->b等等 这是我的密码:Python 如何解码三进制(或任何不寻常的基)字符串?,python,base,ternary,Python,Base,Ternary,对于二进制、四元、八元和十六进制,我很清楚如何将它们流转换为纯文本。有谁能帮我理解我应该如何处理三进制、五进制、元音和其他基数?”这是一个三元的例子,如果有python脚本将不胜感激 到目前为止,我已经尝试: 将每个数字解码为它的二进制对应项,0->00,1->01和2->10 创建由3个字符组成的块,并将它们映射到英语字母表,这些字母表在221->z之前都不起作用:000->a,001->b等等 这是我的密码: from numpy import * import binascii base
from numpy import *
import binascii
base =3
base_data = ''
with open ("./base%s"%base,'r') as b3:
for line in b3:
base_data = base_data + line.strip('\r\n')
output = []
all_nums_in_base = range(base)
list_chars = list(base_data)
final = ''
for char in list_chars:
if char == '0':
output += ['0']
elif char == '1':
output += ['1']
elif char == '2':
output += ['1','0']
output = ''.join(output)
n = int('ob'+output,2)
print binascii.unhexlify('%x' % n)
我的结果是这样的:
JMN4,�J�j�T*2VYI�F�%��TjYCL���Y�E�&�
�I��̚dYCL�Z�
�K*�թ��-P��Qie�K"q�jL��5j�Y���K0�C�K2i�f�
使用此处缩写的示例数据:
> s = '''010020010202011000010200011010011001010202001012...'''
> ''.join(chr(int(s[i:i+6], 3)) for i in range(0, len(s), 6))
=> 'Welcome to base 3!\nLorem ipsum dolor sit amet, consectetur ...'
我猜它用六个三进制数字对每个字符进行编码,因为您的示例数据的长度是6的倍数,36是3的最小幂,大于或等于28。只要颠倒它是如何编码的?@StefanPochmann但我怎么知道它是如何编码的?我有一系列三元数。我应该尝试使用不同的方法吗?二元、三元等是位置数字系统。它们编码数字,而不是文本。如果你想要英语,你需要一些额外的编码层,以及一些分离相邻数字表示的方法。@Yugi如果你没有对其进行编码,那么请询问编码者。@user2357112数字流是我唯一得到的东西。有没有找到分离元素的方法?或者我应该尝试更多的方法吗?谢谢Stefan,你能描述一下你为什么关心2^8吗?我假设它们对字节进行编码,这就是一个字节有多少可能的值。非常感谢,我现在完全理解了。刚刚解决了5号基地的类似问题。