我正在嘗試將一串十進制值轉換為十六進制,一次抓取兩位數
例如,如果我一次將這些小數轉換為兩位數
01 67 15 06 01 76 61 73
這將是我的結果
01430F06014C3D49
我知道這str.to_s(16)會將十進制轉換為十六進制,但就像我說的那樣,我需要一次完成兩位數,因此輸出是正確的,而且我不知道如何在 Ruby 中執行此操作
這是我嘗試過的
str.upcase.chars.each_slice(2).to_s.(16).join
uj5u.com熱心網友回復:
您可以將String#gsub與正則運算式和Kernel#sprintf 一起使用:
"01 67 15 06 01 76 61 73".gsub(/\d{2} */) { |s| sprintf("x", s.to_i) }
#=> "01430f06014c3d49"
正則運算式/\d{2} */)匹配后跟零個或多個空格的兩位數字(注意73后面不跟空格)。
塊計算的結果替換正則運算式匹配的兩個或三個字符。
sprintf的格式化指令形成一個包含2字符'0'的字串,如有必要,用's填充到左側,并將以 10 為基數的整數的字串表示形式轉換為以 16 為基數的整數的字串表示形式 ( 'x')。
或者,可以使用String#%(帶有sprintf's 格式指令):
"01 67 15 06 01 76 61 73".gsub(/\d{2} */) { |s| "x" % s.to_i }
#=> "01430f06014c3d49"
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/380717.html
