printf のフォーマットの例
printf で文字の整列などをすれば楽ちんだろうとは思うんだけど、なかなか覚えきれないので、いくつか例を以て覚えておきたい。
takuya@Desktop$ ruby /Users/takuya/printf_examples.sh printf %d 32 => '32 ' # 数字 printf %5d 32 => ' 32' # 右寄せ printf %-5d 32 => '32 ' # 左寄せ printf %04d 32 => '0032 ' # 0埋め printf %-05d 32 => '32 ' # 0埋め+左寄せ printf %+d 32 => '+32 ' # 符号(+) printf %+d -32 => '-32 ' # 符号(-) printf %.1f -32 => '-32.0' # 小数桁1 printf %.2f 32 => '32.00' # 小数桁2 printf %#x 32 => '0x20 ' # 16進数 printf %#o 32 => '040 ' # 8進数 printf %#b 32 => '0b100000' # 2進数 printf %#08b 7 => '0b000111' # 2進数0埋め
覚えると便利だけど、16進数と10進数の変換(基数変換)も簡単に行える。
単純なコマンドで行える。
takuya@Desktop$ printf "%#x\n" 666 0x29a
このような場合、"666" (文字)
と 666 (int数字)
の考慮が必要ですが。基数変換の場合は、基本的に数字として解釈してくれるので便利です。
16進数の例。
int を hex に変換する(16進数)は簡単に計算できる。
printf %#x 1 # => 0x1 printf %#x 2 # => 0x2 printf %#x 10 # => 0xa printf %#x 15 # => 0xf printf %#x 16 # => 0x10 printf %#x 17 # => 0x11 printf %#x 31 # => 0x1f printf %#x 32 # => 0x20 printf %#x 255 # => 0xff
使ったソースコード
配列を使うのにruby を使ってるけど、実質はbash の printfを呼び出しているだけです。
#!/usr/bin/env ruby formats = { '数字' => [ "%d", 32 ], '右寄せ' => [ "%5d", 32 ], '左寄せ' => [ "%-5d", 32 ], '0埋め' => [ "%04d", 32 ], '0埋め+左寄せ' => [ "%-05d", 32 ], '符号(+)' => [ "%+d", 32 ], '符号(-)' => [ "%+d", -32 ], '小数桁1' => [ "%.1f", -32 ], '小数桁2' => [ "%.2f", 32 ], '16進数' => [ "%#x", 32 ], ' 8進数' => [ "%#o", 32 ], ' 2進数' => [ "%#b", 32 ], ' 2進数0埋め' => [ "%#08b", 7 ], # '金額' => [ "%'d", 32 ], not supported } for k, e in formats do f = e[0] v = e[1] printf( "prinft %-5s %4s => '%-5s' # %-5s \n" , f, v , f%v, k ) end
2024-08-15
prinft の typo を修正