第一:ruby 字符串格式化和進制轉換
"%05d" % 123 結果是 "00123"
"%02X" % 10 結果是 "0A"
"%03x" % 10 結果是 "00a"
"%010x" % 10 結果是 "000000000a" (前綴9個0)
"%10x" %10 結果是 " a" (前綴9個空格)
可以看出 第一個數字是前綴,然後是長度,然後x表16進制,d表示10進制。
堪稱奇技淫巧吧,但是ruby的奇技淫巧,用的很是地方,給開發帶來了極大的效率,讓語言優雅而簡潔~
以上轉載自:http://www.cnblogs.com/coderlee/archive/2008/04/08/1142704.html
ps:長度不是必填項。適用於十進制轉換至16進制,格式化字符串
另:16進制轉換至10進制的方法如下:
'ff'.to_i(16)
最後貼出自己寫的ruby 實現ip轉數字 數字轉ip的代碼,有很多地方待改進。
#數字轉ip=》先將數字轉換爲16進制,然後拆分轉十進制
def conver_ip(data)
@str="%x" % data
@[email protected]
# p @str,@str.length
ip1=(@str[1]+@str[0]).to_i(16).to_s
ip2=(@str[3]+@str[2]).to_i(16).to_s
ip3=(@str[5]+@str[4]).to_i(16).to_s
if @str.length <= 7
ip4=@str[6].to_i(16).to_s
else
ip4=(@str[7]+@str[6]).to_i(16).to_s
end
puts ip4+"."+ip3+"."+ip2+"."+ip1
end
#ip轉數字=》先將ip拆分轉16進制,連接後轉十進制
def ip_conver(str_ip)
@ip_16=''
str_ip.split('.').each do |k|
k="%02x" % k
@ip_16=@ip_16+k.to_s
end
puts @ip_16.to_i(16)
end
#測試通過
conver_ip('16777471')
ip_conver('1.0.0.255')
第二:小數位數控制
兩種方法:
1. ruby的Kernal.sprintf()可以實現保留兩位小數的方法,format是sprintf的alias。format(pattern, value):其中pattern表示要格式化形式,在這裏我們用“%.2f”,表示保留小數點後2位數字,當然我們還可以寫成“%05.2f”,表示整個字符串最少5位數(不包括小數點),如果value少於5位用”0”佔位。
eg: "%0.2f"% 11.329 or format("%0.2f", 11.329)
2. 11.329.round(1) -----> 11.3 11.329.round(2) -----> 11.33
第三:轉義字符
- strstr = str.gsub('<', '<')
- strstr = str.gsub('>', '>')
- strstr = str.gsub(/['"]/, '"')
- strstr = str.lstrip #去掉前後空格
- strstr = str.delete("\n\r") #去掉換行符
- strstr = str.delete(" ") #去掉tab