我试图创建一个头文件,用于将单词转换为不同的数字类型(或左右),从这些数字类型转换为单词。例如,单词'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 loop
和join
这件事,我不确切知道会有多少数字(我可以看到有2位数字和3位数字)。所以我是真的很困惑。
但它没有用。而且我也没有任何想法将这些字符串转换为octals或从octals转换为字符串。我需要的是制作一个'ascii to string'转换器,一个'string to octal'转换器和'八进制到字符串'转换器。任何帮助将不胜感激。
答案 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_string
,bin_string
,ascii_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)