python:octals和ascii中的单词

时间:2015-03-25 13:07:30

标签: python python-3.x ascii octal

我试图创建一个头文件,用于将单词转换为不同的数字类型(或左右),从这些数字类型转换为单词。例如,单词'hello'为数字类型十六进制。

我已经完成了十六进制和二进制的工作。我还设法为ascii转换器创建一个字符串。

这是我的代码:

def string_hex(string):
    return ':'.join(format(ord(c), 'x') for c in string)

def hex_string(hexa):
    hexgen = (hexa[i:i+2] for i in range(0, len(hexa), 2))
    return ''.join(chr(eval('0x'+n)) for n in hexgen)

def string_bin(string):
    return ':'.join(format(ord(c), 'b') for c in string)

def bin_string(binary):
    bingen = (binary[i:i+7] for i in range(0, len(binary), 7))
    return ''.join(chr(eval('0b'+n)) for n in bingen)

def string_ascii(string):
    return ':'.join(str(ord(c)) for c in string)

我尽可能多地尝试在chr()函数的帮助下将ascii文件转换为字符串。 我是这样做的:

>>> from my_convert import *
>>> string_ascii('hello')
>>> '104:101:108:108:111'
>>> a = 104101108108111
>>> chr(a)
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    chr(a)
 OverflowError: Python int too large to convert to C long

要使用for loopjoin这件事,我不确切知道会有多少数字(我可以看到有2位数字和3位数字)。所以我是真的很困惑。

但它没有用。而且我也没有任何想法将这些字符串转换为octals或从octals转换为字符串。我需要的是制作一个'ascii to string'转换器,一个'string to octal'转换器和'八进制到字符串'转换器。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

--> string_hex('Hello')
'48:65:6c:6c:6f'

--> hex_string(string_hex('Hello'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in hex_string
  File "<stdin>", line 3, in <genexpr>
  File "<string>", line 1
    0x:6
     ^
SyntaxError: invalid token

这些功能应该是彼此的镜像 - 您应该能够hex_string一个hex_string并获得您的开始。

问题在于,您的镜像功能(hex_stringbin_stringascii_string等)的格式与原始函数的格式不同;换句话说,string_hex('Hello')生成'48:65:6c:6c:6f',但hex_string需要'48656c6c6f'才能生效。

修复您的*_string功能以处理&#34;字词&#34;由:分隔,您会发现ascii_string函数中可变大小单词的难度消失。

答案 1 :(得分:1)

伙计我认为我得到了一个答案。即使数值之间有':',这个也有效。

# string to hexadecimal converter

def string_hex(string):
    return ':'.join(format(ord(c), 'x') for c in string)

# hexadecimal to string converter.

def hex_string(hexa):
    if ':' in hexa:
        a = hexa.split(':')
        hexa = ''.join(a)
    hexgen = (hexa[i:i+2] for i in range(0, len(hexa), 2))
    return ''.join(chr(eval('0x'+n)) for n in hexgen)

# string to binary converter

def string_bin(string):
    return ':'.join(format(ord(c), 'b') for c in string)

# binary to string converter

def bin_string(binary):
    if ':' in binary:
        a = binary.split(':')
        binary = ''.join(a)
    bingen = (binary[i:i+7] for i in range(0, len(binary), 7))
    return ''.join(chr(eval('0b'+n)) for n in bingen)

# string to ascii converter

def string_ascii(string):
    return ':'.join(str(ord(c)) for c in string)

# ascii to string converter

def ascii_string(asciii):
    if ':' in asciii:
        b = asciii.split(':')
        asciii = ''.join(b)
    b = ''
    c = ''
    i = 0
    while i < len(asciii):
        b += asciii[i]
        if chr(int(b)).isalpha():
            c+=chr(int(b))
            b = ''
            i+=1
        else:
            i+=1
    return c

# string to octal converter

def string_oct(string):
    return ':'.join(format(ord(c), 'o') for c in string)

# octal to string converter

def oct_string(octa):
    if ':' in octa:
        a = octa.split(':')
        octa = ''.join(a)
    octgen = (octa[i:i+3] for i in range(0, len(octa), 3))
    return ''.join(chr(eval('0o'+n)) for n in octgen)