我需要实现一个十进制到字符的转换器。我有 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
Ruby to_s()
方法返回的值的格式没有帮助。数字 82 转换得很好,但转换 120 返回一个我不知道如何处理的值。
谁能解释一下我如何才能使 120 转换(作为示例)返回aep
相等的?换句话说,如何从十进制转换为 26,但在输出中不使用数字?
Ruby's Fixnum#to_s( base )
and String#to_i( base )
用于表示不同基数的数字。不过,您不能使用任意字符,它们被设计为与十六进制和 base64 等约定兼容。
如果您没有转换为不同的基数,而只是将十进制数字编码为字母并返回,那么您只需要一个简单的替换即可:
46.to_s.tr( "0123456789", "abcdefghijk" )
=> "eg"
"eg".tr( "abcdefghijk", "0123456789" ).to_i
=> 46
所以,如果你想做both,并使用 a-z 表示以 26 为基数的数字:
46.to_s(26).tr( "0123456789abcdefghijklmnopq", "abcdefghijklmnopqrstuvwxyz" )
=> "bu"
"bu".tr( "abcdefghijklmnopqrstuvwxyz", "0123456789abcdefghijklmnopq" ).to_i(26)
=> 46
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)