プロが教えるわが家の防犯対策術!

char型全角数字から、int型半角数字への変換するためには
どのような方法があるのかを探しています。

同カテゴリ内でも色々と検索を掛けて見たのですが
適当なものが見当たらなかったため、質問させていただきます。

chara kazu[]="8";(全角数字)

int kazu2=8;(半角数字)
に変換するためにはどうすればよいでしょうか?
変数に代入してfor文で使用が目的です。

宜しくお願い致します。

A 回答 (4件)

★アドバイス


・マイクロソフト社製のコンパイラなら全角文字コードから半角文字コードへの
 変換関数があります。→_mbctombb()昔はzentohan()という名前でした。懐かしい。
 http://msdn.microsoft.com/ja-jp/library/ms350177 …→『_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さんが回答しています。なお、いろいろな方法があります。

参考URL:http://msdn.microsoft.com/ja-jp/library/ms350177 …
    • good
    • 0
この回答へのお礼

回答有難う御座います。
mbctombbも初めて見た関数です。
自分ではこの関数までたどり着くことが出来ませんでした。
大変参考になり、問題解決いたしました。
どうも有難う御座いました。

お礼日時:2008/06/11 09:34

質問を見誤ってました。


コードができているならそれを乗せたほうが回答に近づきますよ。
あと、環境がわかったほうがいいです。

Windowsなら

LCMapString

で、全角→半角 の変換が可能です。
    • good
    • 0
この回答へのお礼

Windowsでvisual studioを使ってプログラムを書いています。
LCMapStringですか?初めて見た関数です。
色々調べて物にしたいと思います。

大変参考になりました。
どうも有難う御座います。

お礼日時:2008/06/11 09:32

# 全角が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が書いてくださったプログラムを読み取ることが出来ず苦戦しています。
もう少し粘って見ますので、解決いたしましたらまた改めて御礼を述べさせていただきたいと思います。

補足日時:2008/06/10 17:23
    • good
    • 0

atol


strtol

この回答への補足

早速の回答有難う御座います。
自分でも色々調べた結果
atoi,atol
を使うのではないか?というところまでは辿り付いたのですが、戻り値が"0"NULLに成ってしまい。
取得したい数値とは異なってしまいます。

テストプログラム
#include <stdio.h>
#include <stdlib.h>

void main()
{

char kazu[]="8";
int kazu2;


kazu2 = atol(kazu);
printf("%d\n",kazu2);
}

補足日時:2008/06/10 16:26
    • good
    • 0
この回答へのお礼

早速の回答有難う御座います。
atoiで検索を掛けたところwiki等では
やはりテストプログラムの結果同様
全角数字を入れるとNULLが戻り値と成るようです。

後他に必要な処理が必要な場合何が必要なのでしょうか?

自分でも引き続き探してみます。
宜しくお願い致します。

お礼日時:2008/06/10 16:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています