Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.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中将int转换为ASCII并返回_Python_Integer_Ascii_Encode - Fatal编程技术网

在Python中将int转换为ASCII并返回

在Python中将int转换为ASCII并返回,python,integer,ascii,encode,Python,Integer,Ascii,Encode,我正在为我的站点制作一个URL缩短器,我目前的计划(我愿意接受建议)是使用一个节点ID来生成缩短的URL。因此,理论上,节点26可能是short.com/z,节点1可能是short.com/a,节点52可能是short.com/z,节点104可能是short.com/ZZ。当用户访问该URL时,我需要反转该过程(显然) 我可以想出一些笨拙的方法来解决这个问题,但我猜还有更好的方法。有什么建议吗?使用hex(id)[2:]和int(urlpart,16)。还有其他选择。base32编码您的id也可

我正在为我的站点制作一个URL缩短器,我目前的计划(我愿意接受建议)是使用一个节点ID来生成缩短的URL。因此,理论上,节点26可能是
short.com/z
,节点1可能是
short.com/a
,节点52可能是
short.com/z
,节点104可能是
short.com/ZZ
。当用户访问该URL时,我需要反转该过程(显然)

我可以想出一些笨拙的方法来解决这个问题,但我猜还有更好的方法。有什么建议吗?

使用
hex(id)[2:]
int(urlpart,16)
。还有其他选择。base32编码您的id也可以工作,但我不知道有任何库在Python中内置base32编码

显然,在Python2.4中引入了base32编码器。您可以尝试使用
b32encode
b32decode
。您应该为
casefold
map01
选项提供
True
,以防人们写下您缩短的URL

事实上,我收回这句话。我仍然认为base32编码是一个好主意,但该模块对于URL缩短的情况并不有用。您可以查看模块中的实现,并针对此特定情况制定自己的解决方案。:-)

ASCII到int:

ord('a')
给出
97

回到字符串:

  • 在Python2中:
    str(unichr(97))
  • 在Python3中:
    chr(97)

给出
'a'

BASE58编码URL怎么样?比如flickr

# note the missing lowercase L and the zero etc.
BASE58 = '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ' 
url = ''
while node_id >= 58:
    div, mod = divmod(node_id, 58)
    url = BASE58[mod] + url
    node_id = int(div)

return 'http://short.com/%s' % BASE58[node_id] + url

将其转换为数字也不是什么大问题。

如果在一个整数/长度内绑定了多个字符,就像我的问题一样:

>>> ord("a")
97
>>> chr(97)
'a'
s = '0123456789'
nchars = len(s)
# string to int or long. Type depends on nchars
x = sum(ord(s[byte])<<8*(nchars-byte-1) for byte in range(nchars))
# int or long to string
''.join(chr((x>>8*(nchars-byte-1))&0xFF) for byte in range(nchars))
s='0123456789'
nchars=len(s)
#字符串设置为int或long。类型取决于nchars
x=范围内字节(nchars)的和(ord(s[字节])8*(nchars-byte-1))&0xFF)

产量
'0123456789'
x=227581098929683594426425L

这太棒了。最后我在这里找到了另一个(更完整的)答案:python3中的chr()!但是,unichr适用于unicode字符集。谢谢您的询问。考虑到base64或base58编码将是最适用的,我承认它与OP中的用例略有出入。我是根据标题来回答这个问题的,从字面上讲,我将整数转换为ascii文本,就好像整数的字节中嵌入了ascii编码的数据一样。如果其他人带着同样的期望结果来到这里,我就发布了这个答案。