ruby 字串格式化 進製轉換 小數字數控制

2021-06-08 14:09:29 字數 2012 閱讀 9811

第一:ruby 字串格式化和進製轉換

"%05d" % 123 結果是 "00123"

"%02x" % 10 結果是 "0a"

"%03x" % 10 結果是 "00a"

"%010x" % 10 結果是 "000000000a" (字首9個0)

"%10x" %10 結果是 "         a"  (字首9個空格)

可以看出 第乙個數字是字首,然後是長度,然後x表16進製制,d表示10進製。

堪稱奇技淫巧吧,但是ruby的奇技淫巧,用的很是地方,給開發帶來了極大的效率,讓語言優雅而簡潔~

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

endputs 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

endputs @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  

格式化字串小實驗

在 裡看到格式化字串攻擊的說明,不是很理解,決定實踐一下,結合tim newsham的format string attacks 進行實驗。這裡只測試了一下 x和 n引數,更多種類的格式化字串攻擊請查閱其他資料。至於測試的環境,應當是c編譯環境都可以,但是在實驗過程中,我發現dev c 預設不對 n...

字串格式化

sprintf snprintf snprintf std stringstream std strstream boost lexical cast boost format cstring format 1 sprintf 使用 sprintf 不安全,輕則破壞資料的準確性,重則程式崩潰。請看下...

格式化字串

通常在使用字串的時候,會對字串進行格式化,然後輸出或呼叫 一般我們使用替換標記對字串進行格式化 string str1 string.format add is 1,2,3 而且在c 中的替換標記可以以任意順序和次數出現在格式化字串中,但替換值是按順序排的,而且替換標記不能超出索引範圍 string...