- ベストアンサー
char型全角数字から、int型半角数字への変換方法
char型全角数字から、int型半角数字への変換するためには どのような方法があるのかを探しています。 同カテゴリ内でも色々と検索を掛けて見たのですが 適当なものが見当たらなかったため、質問させていただきます。 chara kazu[]="8";(全角数字) を int kazu2=8;(半角数字) に変換するためにはどうすればよいでしょうか? 変数に代入してfor文で使用が目的です。 宜しくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
★アドバイス ・マイクロソフト社製のコンパイラなら全角文字コードから半角文字コードへの 変換関数があります。→_mbctombb()昔はzentohan()という名前でした。懐かしい。 http://msdn.microsoft.com/ja-jp/library/ms350177(VS.71).aspx→『_mbctombb』 これを使えば数字以外にも英字、記号も対応する半角文字に変換できます。 サンプル: #include <stdio.h> #include <mbstring.h> // メイン関数 int main( void ) { unsigned char kazu[] = "1234567890"; unsigned char *p; unsigned int moji; for ( p = kazu ; *p != '\0' ; p += 2 ){ moji = (p[0] << 8) | p[1]; moji = _mbctombb( moji ); printf( "%c%c→%c\n", p[0], p[1], moji ); } return 0; } または unsigned char kazu[] = "8"; unsigned int moji; moji = _mbctombb( (kazu[0] << 8) | kazu[1] ); printf( "%s→%c\n", kazu, moji ); ※マイクロソフト社製以外のコンパイラや移植性も考えるならご自分で 全角文字→半角文字の変換するルーチンを書いて下さい。仕組みは 既にredfox63さんが回答しています。なお、いろいろな方法があります。
その他の回答 (3)
- takoashi
- ベストアンサー率39% (21/53)
質問を見誤ってました。 コードができているならそれを乗せたほうが回答に近づきますよ。 あと、環境がわかったほうがいいです。 Windowsなら LCMapString で、全角→半角 の変換が可能です。
お礼
Windowsでvisual studioを使ってプログラムを書いています。 LCMapStringですか?初めて見た関数です。 色々調べて物にしたいと思います。 大変参考になりました。 どうも有難う御座います。
- redfox63
- ベストアンサー率71% (1325/1856)
# 全角がShift-JISならば ・・・ char wnum[] = "0123456789"; char anum[] = "0123456789"; char kazu[] = "8"; int kazu2 = -1; char *pPos = strstr( wnum, kazu ); if ( pPos != NULL ) { int nIndex = (int)( pPos - wnum ) / 2; char buf[20] = {0}; strcpy( buf, &anum[nIndex], 1 ); kazu2 = atoi( buf ); } といった具合です # 適切なヘッダーをインクリュードしてください
補足
回答有難う御座います。 只今ヘッダをつけてインクルードしてみた結果 ビルドでいくつかエラーが発生してしまいましたので 修正をしながら色々試しています。 C言語初心者なので、redfox63が書いてくださったプログラムを読み取ることが出来ず苦戦しています。 もう少し粘って見ますので、解決いたしましたらまた改めて御礼を述べさせていただきたいと思います。
- takoashi
- ベストアンサー率39% (21/53)
atol strtol
お礼
早速の回答有難う御座います。 atoiで検索を掛けたところwiki等では やはりテストプログラムの結果同様 全角数字を入れるとNULLが戻り値と成るようです。 後他に必要な処理が必要な場合何が必要なのでしょうか? 自分でも引き続き探してみます。 宜しくお願い致します。
補足
早速の回答有難う御座います。 自分でも色々調べた結果 atoi,atol を使うのではないか?というところまでは辿り付いたのですが、戻り値が"0"NULLに成ってしまい。 取得したい数値とは異なってしまいます。 テストプログラム #include <stdio.h> #include <stdlib.h> void main() { char kazu[]="8"; int kazu2; kazu2 = atol(kazu); printf("%d\n",kazu2); }
お礼
回答有難う御座います。 mbctombbも初めて見た関数です。 自分ではこの関数までたどり着くことが出来ませんでした。 大変参考になり、問題解決いたしました。 どうも有難う御座いました。