如何解码三元组(或任何不寻常的基础)中的字符串?

时间:2018-01-28 01:18:03

标签: python base ternary

对于二进制,quaternery,octonery和hex,我很清楚如何将它们的流转换为纯文本。任何人都可以帮我理解我应该如何为三元,五元,圣堂和其他基地做这件事? (Here是一个三元的例子,一个python脚本将不胜感激) 到目前为止,我已经尝试过:

  • 将每个号码解码为二进制对应的0->001->012->10
  • 创建3个字符的块并将它们映射到不起作用的英文字母:000->a001->b等等,直到221->z

这是我的代码:

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�

1 个答案:

答案 0 :(得分:3)

使用您的示例数据(此处略):

> 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的倍数,3 6 是3的最大幂,大于或等于2 8