3

我需要实现一个小数到字符的转换器。我有 26 个字符可用,所以它是关于将整数转换为以 26 为基数的系统,然后将每个数字更改为对应的字母。我不想在最终结果字符串中使用字符 0-9。我可以使用to_s()方法,这就是它的方式:

82.to_s(26)  #=> "34" / which gives me "de"
120.to_s(26)  #=> "4g" / which should give me "aep", but it's not

Rubyto_s()方法以无用的格式返回值。数字 82 转换得很好,但是 120 的转换返回一个我不知道如何处理的值。

谁能解释我如何使 120 转换(例如)返回aep等效?换句话说,如何从十进制转换为 26 但在输出中不使用数字?

4

1 回答 1

12

Ruby 的Fixnum#to_s( base )String#to_i( base )用于表示不同基数的数字。但是,您不能对它们使用任意字符,它们被设计为与 hex 和 base64 等约定兼容。

如果您没有转换为不同的基数,而只是将十进制数字编码为字母并返回,那么您只需要一个简单的替换:

46.to_s.tr( "0123456789", "abcdefghijk" )
=> "eg"

"eg".tr( "abcdefghijk", "0123456789" ).to_i
=> 46

所以,如果你想两者都做,并使用 az 以 26 为基数表示你的数字:

46.to_s(26).tr( "0123456789abcdefghijklmnopq", "abcdefghijklmnopqrstuvwxyz" )
=> "bu"

"bu".tr( "abcdefghijklmnopqrstuvwxyz", "0123456789abcdefghijklmnopq" ).to_i(26)
=> 46
于 2013-07-22T10:47:05.860 回答