私はchar配列を持っています:
char c[10]="ff213";
char の 1 つの要素を int にキャストする必要があります。私はこれを試しました:
int i=atoi(c[2]);
しかし、ランタイムエラーが発生します。この:
int i=(int)c[2];
しかし、2 ではなく 50 を返します。
そのようです:
const int digit2 = c[2] - '0';
これが機能するのは、C が 10 進数のエンコーディングが連続していて、ギャップがないことを保証しているためです。
これは(ご覧のとおり)「キャスト」ではなく、単純な計算です。文字をキャストすると、エンコーディングの表現が整数として取得されます。この場合、数字 2 の ASCII (および UTF-8、およびその他のエンコーディングの束) エンコーディングである 50 (16 進 0x32) です。
取得しているエラーの理由は、文字列 (つまり、null で終わる文字列)をatoi()
想定しているためです。char*
ポインターではなく char を指定しているだけでなくatoi()
、null-byte ( '\0'
) は 5 番目の char の後にのみ存在します。
あなたが求めていることを達成する最も簡単な方法は次のとおりです。
int i = c[2] - '0';
このように、'2'
(50) の ASCII コードは (48) の ASCII コードで減算され、'0'
の正しい答えが得られi
ます。