自定义基数列(+特殊字符)

时间:2018-02-10 18:16:58

标签: swift string numbers

目前我正在使用此代码将数字转换为 base36 -string:

let number = 300293338
let base36 = String(number, radix: 36);
print(base36) // 4ysbtm

但我想知道如何使用Swift生成一个 Base10到AnyBase转换的字母表。

字母表的例子可能是这样的:

["$", "%", "&", "/", "(", "9", "=", "?", "+", "#", "-", ".", ">", "<", "*", "!", ...]

它可能看起来像这样:

let number = 300293338
let base36 = mycoolfunction(number)
print(base36) // "$%//+#="

1 个答案:

答案 0 :(得分:2)

如何将基本基数10用于任何基本转换,修改为自定义数字:

func numberToCustomRadix(_ number: Int, alphabet: String) -> String {
    let base = alphabet.count
    var number = number
    var result = ""
    repeat {
        let idx = alphabet.index(alphabet.startIndex, offsetBy: number % base)
        result = [alphabet[idx]] + result
        number /= base
    } while number > 0
    return result
}

numberToCustomRadix(3, alphabet: "012") // 10
numberToCustomRadix(4, alphabet: "abc") // bb
numberToCustomRadix(5, alphabet: "%#9") // #9

请注意,自定义字母表的问题在于,在编译时很难保证字母表包含不同的字符。例如。 “aaabbbcc”字母表会产生各种转换问题。