文字列から数値へと、atoiなどで明示的に置き換えねばなりません。
C
1#include <stdio.h>
2#include <stdlib.h>
3
4int main(void) {
5 char *hoge = "67";
6 putchar(atoi(hoge));
7
8 return 0;
9}
実行結果
適当にatoi的な何かをコーディングしてみました。
実際のatoiはもっと複雑ですが、『一文字ずつ処理している』イメージは掴めるかと思います。
C
1int my_atoi(const char *arg) {
2 int ret = 0;
3 for(const char* pt = arg; *pt != '\0'; ++pt) {
4 ret *= 10;
5 ret += *pt - '0';
6 }
7 return ret;
8}
追記:ご指摘を受けて
strtolを使うことで簡潔に書けました。yumetodoさん、ご指摘ありがとうございます。
C
1#include <stdio.h>
2#include <stdlib.h>
3
4int main(void) {
5 char *hoge = "65 66 67";
6
7 for(char *pt = hoge; pt[0] != '\0';) {
8 long num = strtol(pt, &pt, 10);
9 printf("%c\n", (char)num);
10 }
11 printf("%s\n", hoge);
12
13 return 0;
14}
実行結果
エラーに対して頑健にするには、もうちょっといじる必要があります。
0. オーバーフローが起きていないか (3番目に含まれる)
0. 10進数として解釈できない文字に突き当たっていないか
0. 得られた数値はアスキーコードとして解釈可能か
C
1// if(errno == ERANGE) break;
2if(!isspace(pt[0]) && pt[0] != '\0') break;
3if(num < 0 || (1 << 7) <= num ) break;
これで足りるのかなぁ... 本当にC言語は難しいです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。