Rubyで数値を16進文字列に変換するには
irb> 255.to_s(16)とto_sを使えばいい。が、負の値に対して同じことをやると
=> "ff"
irb> -255.to_s(16)こんな残念な結果を見ることになる。いつも思うんだけど、これって誰が望んでるんだ?
=> "-ff"
で、負の数のビットパターンを直接見たい場合は
irb> (-255 & 0xffff).to_s(16)こうすればいいと気が付いた。16進リテラルは必ず非負扱いのようなので、符号ビットは常にゼロ。当然、どんなに符号拡張されても符号ビットは常にゼロ。それと論理積を取ればどんな値でも符号ビットが落ちるので、それからto_sすれば望んだ結果になる。
=> "ff01"
irb> (-255 & 0xffffffffffffffff).to_s(16)
=> "ffffffffffffff01"
0 件のコメント:
コメントを投稿