Edited at

char を数字として出力したい!

More than 3 years have passed since last update.

charといえば、もっぱら文字を表すのに使われる型で、std::coutはそれを前提とした動作をする。

具体的には…

char c = 65 // 文字コードがASCIIなら'A'と同じ

std::cout << c << std::endl

出力
A


流れに逆らう

では、もしcを文字ではなく数字として出力したい場合はどうするか。

ググってみるとStack Overflowにこんなのが。

http://stackoverflow.com/questions/14644716/how-to-output-a-character-as-an-integer-through-cout

投票数の多い回答を見ると、単項演算子+cに付けるだけでよいという。

つまり、

char c = 65 // 文字コードがASCIIなら'A'と同じ

std::cout << +c << std::endl

出力
65

仕組みはよくわからないが、元のページによれば「数字として表示される型に昇格される」らしい。

つまりはintとかにキャストするのと同じなのだろうか。


動機

自分はcharそのものに興味はないのだが、int8_tuint8_tは処理系によってはsigned charunsigned charをtypedefすることで実装されている。

typedefされた型はテンプレート特殊化では元の型と同じ扱いなので、単なる数値型としてint8_tを使ってもchar向けの特殊化の影響を受けてしまう。

これを回避する方策を探していたのだった。

(噂に聞く「強いtypedef」とかいうのがあればこういう問題もなくなるのだろうか…)