- 数字 => 字符串
puts "%0x" % 255
#输出16进制的对应字符串 =>“ff"
puts "%0d" % 255
#输出10进制的对应字符串 =>“255"
puts "%0b" % 255
#输出2进制的对应字符串 =>“11111111"
puts "%0o" % 255
#输出8进制的对应字符串 =>“377"
上面的都是渣渣
puts 1000.to_s(14)
#输出14进制的对应字符串 =>“516"
puts 500.to_s(3)
#输出3进制的对应字符串 =>“200112" - 字符串 => 数字
puts Integer("0b"+"11111111")
orputs "11111111".to_i(2)
#输出10进制的对应数字 =>255
puts Integer("0x"+"ff")
orputs "ff".to_i(16)
#输出10进制的对应数字 =>255
puts Integer("0d"+"255")
orputs "255".to_i(10)
#输出10进制的对应数字 =>255
puts Integer("0o"+"377")
orputs “377”.to_i(8)
#输出8进制的对应数字 =>255
重要:如果把一个随机进制的字符串转换成另一个随机进制的字符串,可以用下面的方法:
def decode(input, source)
base = source.length
digits = input.chars
(input.length-1).downto(0).inject(0) do |total, power|
#将字符串转换成10进制的数,先找出某字符在进制中的index,这样就得到一个10进制的数,再乘以几进制对应的几(2进制就乘以2,7进制就乘以7)与位数,如果是千位,则是base的3次方,如果是万位,就是4次方
total + source.index(digits.shift) * base ** power
end
end
def encode(number, target)
base = target.length
return target[0] if number == 0
#通过log这个函数得到位数,比如log(268,10)==2.4281347940287885,可以得到这是个3位数,百位为2,十位为1,个位为0.
max_power = Math.log(number,base).floor
remainder = number
result = max_power.downto(0).inject('') do |r, power|
#先除以最大位数对应的值(即几进制的几的当前位数的次方)得到最大位数的字符,依次计算,即可得到 所有位数对应的字符
current, remainder = remainder.divmod(base ** power)
r << target[current]
end
result
end
#另外一种求对应进制数的办法
def encode_a(number, target)
s = ""
base = target.length
return target[0] if number == 0
while number != 0
s = target[number % base] + s
number /= base
end
s
end
def convert(input, source, target)
encode( decode(input, source), target )
#encode_a( decode(input, source), target )
end
bin='01'
oct='01234567'
dec='0123456789'
hex='0123456789abcdef'
allow='abcdefghijklmnopqrstuvwxyz'
allup='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
alpha='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
alphanum='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
p convert("15", dec, bin) #should return "1111"
p convert("15", dec, oct) #should return "17"
p convert("1010", bin, dec) #should return "10"
p convert("1010", bin, hex) #should return "a"
p
p convert("0", dec, alpha) #should return "a"
p convert("27", dec, allow) #should return "bb"
p convert("hello", allow, hex) #should return "320048"
网友评论