文字数字を C の対応する整数に変換する

他の回答によると、これで問題ありません:

char c = '5';
int x = c - '0';

また、エラー チェックのために、最初に isdigit(c) が true であることを確認することもできます。文字に対して同じことを完全に移植可能に行うことはできないことに注意してください。たとえば、

char c = 'b';
int x = c - 'a'; // x is now not necessarily 1

標準では、数字 '0' から '9' の char 値が連続していることを保証していますが、アルファベットの文字などの他の文字については保証していません.


このように「0」を引きます:

int i = c - '0';

C 標準では、範囲 '0'..'9' の各桁が保証されています 前の桁より 1 大きい (セクション 5.2.1/3 内) C99 ドラフトの)。 C++ についても同様です。


偶然にも 文字列 を変換したい場合 文字から整数へ、あなたもそれを行うことができます!

char *num = "1024";
int val = atoi(num); // atoi = ASCII TO Int

val 現在は 1024 です。どうやら atoi() それについて先に述べたことは、私にのみ当てはまります (OS X 上 (おそらく (ここに Lisp ジョークを挿入してください)))。 strtol() を使用する次の例に大まかに対応するマクロだと聞いています。 、より汎用的な関数で、代わりに変換を行います:

char *num = "1024";
int val = (int)strtol(num, (char **)NULL, 10); // strtol = STRing TO Long

strtol() 次のように動作します:

long strtol(const char *str, char **endptr, int base);

*str を変換します long に 、ベース base であるかのように扱います 番号。 **endptr の場合 null ではなく、数字以外の最初の文字 strtol() を保持します 見つかりました (しかし、誰が気にしますか)。