Python UUID表示为特殊字符
在Python中创建UUID时,喜欢:
>>> uuid.uuid1()
UUID('a8098c1a-f86e-11da-bd1a-00112444be1e')
如何将UUID映射到由大写字母A-Z减去字符D,F,I,O,Q和U以及数字加上字符“+”和“=”组成的字符串中。即从整数或字符串到32(相对OCR友好)字符的集合:
[ABCEGHJKLMNPRSTVWXYZ1234567890+=]
我将其称为OCRf
集(适用于OCR友好)。
我想要一个同构函数:
def uuid_to_ocr_friendly_chars(uid)
"""takes uid, an integer, and transposes it into a string made
of the the OCRf set
"""
...
我的第一个想法是经历将uuid改为基数为32的过程。
OCRf = "ABCEGHJKLMNPRSTVWXYZ1234567890+="
def uuid_to_ocr_friendly_chars(uid):
ocfstr = ''
while uid > 1:
ocfstr += OCRf[uid % 32]
uid /= 32
return ocfstr
但是,我想知道这种方法是否是进行此转换的最佳和最快的方法 - 或者是否有更简单快速的方法(例如内置,更智能的算法或更好的方法)。
我很感激你的意见。谢谢。
没有找到相关结果
已邀请:
3 个回复
拟僚疽刊剔
这样的东西就会按你所要求的那样(不是使用你提供的整个字母表,但是这个的唯一成本就是缺少18.75%的“挤压”)。 如果压缩每个最后一个字节是至关重要的,我会处理每个20位的子串 - 这是5个十六进制字符,在你的时髦字母表中有4个字符。其中有6个(还剩下8个比特,你可以拿着
,因为没有什么可以做任何更好的事情)。您可以通过切割
轻松获得子串,并将每个子串转换为带有
的int。然后,您基本上可以应用上面使用的相同算法 - 但算法都是在更小的数字上完成的,因此速度增益应该是重要的。另外,不要通过循环
来构建字符串 - 制作所有“数字”的列表,并在结尾处
-这也是性能改进。
徐百晴墓斜
要再转换回来
冕偷淮款
是的,这个方法确实让我有点不舒服,谢谢你的要求。