在Julia中以整数表示非数字字符串

时间:2018-03-21 20:13:43

标签: string type-conversion julia

我正在寻找一种简单且可逆的方式来用整数表示Julia字符串(例如用于加密)。为了清楚起见,我没有考虑像" 123"这样的整数的字符串表示,而是像" Hello"那样的任意字符串。该表示不需要是人类可读的,但它需要易于反转回一个唯一的字符串(因此不是哈希)。它不需要高效;我只是在寻找尽可能简单的东西。 (另外,如果它仅适用于小字符集,例如小写罗马字母,那就很好。)

一种天真的方式是将collect字符串转换为字符向量,parse(Int, _)将每个字符串转换为整数,并连接整数。但这看起来很麻烦,我怀疑内置的Julia功能(或小功能组合)可以更轻松地完成工作。

2 个答案:

答案 0 :(得分:2)

如果您的字符串仅使用数字0-9和字母a-zA-Z,那么您可以直接将字符串解析为基数62 BigInteger:

julia> s = randstring(123)
"RFXkzD6VpWcwvbsxOtdTxS4DGcgciKgDXECa9fEK0Djcdkcj5N75vIHEMVyuH9mcYgvFbLhbPdrKyPIO4JsK1DKgZIacov6WKDZdIpGJ5iJ15dpjmcCBCybMmxB"

julia> i = parse(BigInt, s, base=62)
12798646956721889529517502411501433963894611324020956397632780092623456213685688389093681112679380669903728068303911743800989012987014660454736389459814982802097607808640628339365945710572579898457023165244164689548286133

julia> string(i, base=62)
"RFXkzD6VpWcwvbsxOtdTxS4DGcgciKgDXECa9fEK0Djcdkcj5N75vIHEMVyuH9mcYgvFbLhbPdrKyPIO4JsK1DKgZIacov6WKDZdIpGJ5iJ15dpjmcCBCybMmxB"

答案 1 :(得分:0)

我创建了一个适用于ASCII字符串的(有点复杂的)实现:

(CASE
WHEN 
  companies.mainSubcategory = '217'
THEN
  companies.name 
WHEN
  companies.mainSubcategory = '216') AND
  companies.id = company_event_associated_companies.company_id)

THEN
(SELECT companies.name  FROM companies WHERE 
         companies.id = '332')
END ) AS 'Band'

如果你能想到更好的一个,请告诉我。