memo.log

技術情報の雑なメモ

【Ruby】複数桁の16進数を10進数に変換する

2FF とかを 767 に変換する。 16進数は文字列リテラルで表現されているものとする。

普通に "2FF" とかだったら hex したらいいけど、

irb(main):089:0> "0x2FF".hex
=> 767

一文字ずつの16進数がまとまった文字列の場合を想定する。 例えば2FF だったら "\xFF\x2" みたいな感じ。

def test(str)
  str.bytes.each.with_index.inject(0) do |sum, (v, index)|
    sum += v << (8 * index)
  end
end

test("\xFF\x2")

参考

each_with_indexしつつinjectしたい - Qiita https://qiita.com/ymstshinichiro/items/366b738ceefd224b5d41