我正在寻找一种简单且可逆的方法来用整数表示 Julia 字符串(例如用于密码学)。需要明确的是,我没有考虑像“123”这样的整数的字符串表示,而是像“Hello”这样的任意字符串。该表示形式不需要是人类可读的,但它需要能够轻松反转回唯一的字符串(因此不是哈希)。它不需要是高效的;我只是在寻找尽可能简单的东西。 (此外,如果它只适用于小字符集,例如小写罗马字母,也没关系。)
一种简单的方法是将字符串收集
到一个字符向量中,将每个字符解析(Int, _)
为一个整数,然后连接整数。但这似乎很麻烦,我怀疑内置的 Julia 函数(或小型函数组合)可以更轻松地完成工作。
最佳答案
如果您的字符串仅使用数字0-9
和字母a-z
和A-Z
,那么您可以直接将字符串解析为base 62大整数:
julia> s = randstring(123)
"RFXkzD6VpWcwvbsxOtdTxS4DGcgciKgDXECa9fEK0Djcdkcj5N75vIHEMVyuH9mcYgvFbLhbPdrKyPIO4JsK1DKgZIacov6WKDZdIpGJ5iJ15dpjmcCBCybMmxB"
julia> i = parse(BigInt, s, base=62)
12798646956721889529517502411501433963894611324020956397632780092623456213685688389093681112679380669903728068303911743800989012987014660454736389459814982802097607808640628339365945710572579898457023165244164689548286133
julia> string(i, base=62)
"RFXkzD6VpWcwvbsxOtdTxS4DGcgciKgDXECa9fEK0Djcdkcj5N75vIHEMVyuH9mcYgvFbLhbPdrKyPIO4JsK1DKgZIacov6WKDZdIpGJ5iJ15dpjmcCBCybMmxB"
关于string - 在 Julia 中以整数形式表示非数字字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49415718/