有一回在文件命名生成字符串的唯一性犯了难
想到时间戳,但是时间戳长度又相对较长
后来在Autohotkey官方论坛看见简繁互换的函数,便着手diy了个自定义编码的函数
思路很简单,用字符串列表生成自定义进制
如16进制0-F
代码改得有点紧凑,翻译成python语言花了点时间
直接上代码,先上autohotkey
目前仅测试过正整数
msgbox, % a := 转码(a_now)
MsgBox, % 解码(a)
return
转码(传入数字) {
static 码表 := 返回码表()
if 传入数字 is not integer
return ""
if 传入数字 < 0
return -1
Loop
位数 := A_Index
until (传入数字 // (码表.MaxIndex() ** A_Index)) = 0
Loop {
输出字符 .= 码表[传入数字 // (当前除数 := (码表.MaxIndex() ** (位数 - A_Index))) + 1]
传入数字 := Mod(传入数字, 当前除数)
if (位数 = A_Index)
return 输出字符
}
}
解码(码值) {
static 码表 := 返回码表()
最终值 := 0
码长 := StrLen(码值)
Loop, parse, 码值
{
当前码位 := 码长 - A_Index
for i, v in 码表
{
if (A_LoopField == v) {
i -= 1
break
}
}
最终值 += ((码长 = A_Index) ? (i) : (码表.MaxIndex() ** 当前码位 * i))
}
return 最终值
}
返回码表() {
s := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
ls := []
loop, parse, s
ls.push(A_LoopField)
return ls
}
接着是python
from time import time
def tocode