Help us understand the problem. What is going on with this article?

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」とかいうのがあればこういう問題もなくなるのだろうか…)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした