Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何解码三进制(或任何不寻常的基)字符串?_Python_Base_Ternary - Fatal编程技术网

Python 如何解码三进制(或任何不寻常的基)字符串?

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

对于二进制、四元、八元和十六进制,我很清楚如何将它们流转换为纯文本。有谁能帮我理解我应该如何处理三进制、五进制、元音和其他基数?”这是一个三元的例子,如果有python脚本将不胜感激 到目前为止,我已经尝试:

将每个数字解码为它的二进制对应项,0->00,1->01和2->10 创建由3个字符组成的块,并将它们映射到英语字母表,这些字母表在221->z之前都不起作用:000->a,001->b等等 这是我的密码:

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号基地的类似问题。