我有很长的字符串,我想把它作为长数字呈现。 我试过了:
l=[ord (i)for i in str1]
但这不是我需要的。
我需要将它作为长号而不是数字作为列表中的项目。
这一行给了我[23,21,45,34,242,32]
我想把它改成一个长数字,我可以再把它改成同一个字符串。
任何想法?
答案 0 :(得分:1)
以下是Paulo Bu的答案(使用base64编码)到Python 3中的翻译:
>>> import base64
>>> s = 'abcde'
>>> e = base64.b64encode(s.encode('utf-8'))
>>> print(e)
b'YWJjZGU='
>>> base64.b64decode(e).decode('utf-8')
'abcde'
基本上不同之处在于您的工作流程来自:
string -> base64
base64 -> string
要:
string -> bytes
bytes -> base64
base64 -> bytes
bytes -> string
答案 1 :(得分:0)
使用base 64
编码怎么样?你还好吗?这是一个例子:
>>>import base64
>>>s = 'abcde'
>>>e = base64.b64encode(s)
>>>print e
YWJjZGU=
>>>base64.b64decode(e)
'abcde'
编码不是纯数字,但你可以在没有太多麻烦的情况下来回转换。
您也可以尝试将字符串编码为十六进制。这会产生数字虽然我不确定你总能从编码字符串回到原始字符串:
>>>s='abc'
>>>n=s.encode('hex')
>>>print n
'616263'
>>>n.decode('hex')
'abc'
如果你需要实际整数那么你可以扩展这个技巧:
>>>s='abc'
>>>n=int(s.encode('hex'), 16) #convert it to integer
>>>print n
6382179
hex(n)[2:].decode('hex') # return from integer to string
>>>abc
注意:我不确定这项工作是否在Python 3中开箱即用
更新:为了使其适用于Python 3,我建议以这种方式使用binascii
module:
>>>import binascii
>>>s = 'abcd'
>>>n = int(binascii.hexlify(s.encode()), 16) # encode is needed to convert unicode to bytes
>>>print(n)
1633837924 #integer
>>>binascii.unhexlify(hex(n)[2:].encode()).decode()
'abcd'
从字节转换为字符串需要 encode
和decode
方法,反之亦然。如果您打算包含特殊(非ascii)字符,那么您可能需要指定编码。
希望这有帮助!
答案 2 :(得分:0)
这就是你要找的东西:
>>> str = 'abcdef'
>>> ''.join([chr(y) for y in [ ord(x) for x in str ]])
'abcdef'
>>>
答案 3 :(得分:0)
#! /usr/bin/python2
# coding: utf-8
def encode(s):
result = 0
for ch in s.encode('utf-8'):
result *= 256
result += ord(ch)
return result
def decode(i):
result = []
while i:
result.append(chr(i%256))
i /= 256
result = reversed(result)
result = ''.join(result)
result = result.decode('utf-8')
return result
orig = u'Once in Persia reigned a king …'
cipher = encode(orig)
clear = decode(cipher)
print '%s -> %s -> %s'%(orig, cipher, clear)
答案 4 :(得分:0)
这是我发现有效的代码。
str='sdfsdfsdfdsfsdfcxvvdfvxcvsdcsdcs sdcsdcasd'
I=int.from_bytes(bytes([ord (i)for i in str]),byteorder='big')
print(I)
print(I.to_bytes(len(str),byteorder='big'))