試す:
FORMAT = '%0.*b'
bitmask = "0001010010010010010001001"
bitmask.to_i(2) # => 2696329
hexval = bitmask.to_i(2).to_s(16) # => "292489"
FORMAT % [bitmask.size, hexval.to_i(16)] # => "0001010010010010010001001"
それがしていることは次のとおりです。
to_i(2)
何が起こっているかを示すために、文字列をバイナリから整数値に変換します。
to_i(2).to_s(16)
文字列としての 16 進表現に変換します。
FORMAT
渡された最初のパラメータから取得した不明な長さ ( ) の先行バイト ( )printf
を使用して、渡された値をバイナリ文字列表現 ( ) に変換することを示す書式文字列が含まれています ( )。%b
0
%0b
%0.*b
bitmask.size
より長いビットマスクを使用した別の例を次に示します。
bitmask = "11011110101011011011111011101111"
hexval = bitmask.to_i(2).to_s(16) # => "deadbeef"
FORMAT % [bitmask.size, hexval.to_i(16)] # => "11011110101011011011111011101111"
さらに長く:
bitmask = "1101111010101101101111101110111111111110111011011010110111011010"
hexval = bitmask.to_i(2).to_s(16) # => "deadbeeffeedadda"
FORMAT % [bitmask.size, hexval.to_i(16)] # => "1101111010101101101111101110111111111110111011011010110111011010"