数字の ASCII 値を整数に変換したい場合は、次のようにする必要があります。
value - '0'
?
逆に、Integer を ASCII に変換するには、次のようにする必要があります。
value + '0'
何故ですか?
数字文字の整数値は、C 標準によって連続することが保証されているためです。
したがって'1' - '0' == 1
、'2' - '0' == 2
式が実際に機能することを推測できるなど。
補足:
その結果、ASCII 数字が次々とエンコードされるためです。
と言う'0' == 48
。次に'1' == 49
、'2' == 50
など。
考えてみれば、'2' - '0' == 50 - 48 == 2
. 同様に、2 + '0' == 2 + 48 == 50 == '2'
.
数字の ASCII 値はすべて順番に並んでいます。したがって0
、ASCIIコードポイントでシーケンスの開始をマークし、位置48
まで続けます。9
57
ASCII標準で定義されているように、数字のコードが順番に(48 .. 57)あるという理由だけで。
ASCII 値は、テーブル内のシンボルの位置番号です。したがって、「0」記号の位置番号を数字記号のオフセットとして使用し、それに整数の数字値を追加して、その位置番号を計算できます。