或阿呆のブログ

Pythonを好んで使っているプログラマです。Ruby,Perl,PowerShell,VBAなどでもたまに書いています。最近はスロット放浪記やってます。。

intをHex(16進数)の桁数指定で表示する方法。

やり方はいろいろあるんだけどさ、やっぱり直感的にわかりやすいほうが覚えは間違いなくいい。

Sample Code(サンプルコード)

            int d = 100;
            Debug.WriteLine("{0:x4}",d );
            Debug.WriteLine(d.ToString("x4"));

Result(実行結果)

0064
0064

結果は同じだけど、どっちがいい?個人的な意見だけど、後者のほうが断然良くないか?CやC++やってきた人間には、前者のほうが自然なんだろうね。第2番引数をx(hex)で表示しまっせと予め言っておいて、それはdだと後から指定する方法は、馴染み深いようにも思える。

だけど、俺の語感からすると、print文にまっさきに教えたいなと思うのは、変数名なんだよね。フォーマット指定は後付でもいいわけ。

ちょっと例を変えてみよう。変数を2つ取るとしたらどうなるだろうか?

Sample Code(サンプルコード)

            int d = 100;
            Debug.WriteLine("{0:x4}:{0:d4}", d);
            Debug.WriteLine(d.ToString("x4") +":"+  d.ToString("d4"));

Result(実行結果)

0064:0100
0064:0100

まぁ、どっちもどっちなんだけど、、、簡潔なのは前者だよね。だけど、第2引数との関係性だとか、:が読みづらいだとか、そういうことを考えると、あまり親切じゃない気がする。後者は、文字数自体は多いけど、可読性は高いと感じる。+演算子使って連結しているところなんか、いかにも別物の対象同士をくっつけているという感がしていていい。

突き詰めると、

            Debug.WriteLine("{0:x4}:{0:d4}", d);

これは、デバッグ文に1つの完成された文字列を渡しているってことかな。

            Debug.WriteLine(d.ToString("x4") +":"+  d.ToString("d4"));

これは、3つの文字列を足したものを渡している言える。もっとも、デバッグ文に渡しているのは1つの文字列なんだが・・・。

後者のほうは、

            Debug.Write(d.ToString("x4"));
            Debug.Write(":");
            Debug.Write(d.ToString("d4"));
            Debug.WriteLine("");

こう書き換えてもいい。それぞれが完成された文字列にも分割出来るのであるから。

余談だが、最後の書き方をしていると、Pythonのprintとprint,を連想しちゃうね。。。