Python字符串为长数

时间:2014-01-20 15:44:30

标签: python list numbers

我有很长的字符串,我想把它作为长数字呈现。 我试过了:

l=[ord (i)for i in str1]

但这不是我需要的。 我需要将它作为长号而不是数字作为列表中的项目。 这一行给了我[23,21,45,34,242,32] 我想把它改成一个长数字,我可以再把它改成同一个字符串。

任何想法?

5 个答案:

答案 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'
从字节转换为字符串需要

encodedecode方法,反之亦然。如果您打算包含特殊(非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'))