ASCIIコード変換

[戻る]
ゴマ 2007/10/29(月) 15:00:37
Visual C++ Express Editionを使用しています。
簡易関数電卓のようなものを作っています。
そこで入力された整数がASCIIコードで言うところの、なんなのかというのを表示したい
のですが、整数から対応するASCIIコードへの変換方法がわかりません。
よろしくお願いします。

επιστημη [HomePage] 2007/10/29(月) 15:06:26
#include <iostream>

int main(){
  std::cout << (int)'0' << std::endl;
  ... 以下同文
  std::cout << (int)'9' << std::endl;
}

Blue 2007/10/29(月) 15:07:47
入力とはどこから?

それと、
>Visual C++ Express Editionを使用しています。
では不十分です。

プロジェクトの種別を明記してください。
(CLRとMFCとでは全然違うコードになります。)

CLRならString^型変数からEncoding::ASCIIあたりで取得できるかな。
(String::ToCharArrayメソッドでもいけそうですけど。)

MFCならCString型変数から、一文字とって、数値にするだけ。

PATIO 2007/10/29(月) 16:28:39
VC++ Express EditionならMFCは無いと思うので、
C++/CLIなのかWin32なのかですね。
あと、Windowアプリなのかコンソールアプリなのかも欲しいです。

ただ、どうせ書くなら正確に書いた方が良いと思います。
多分、Visual C++ 2005 Express Editionなのではないかと。

入力された数値がASCIIコードに相当する場合はと言う話ですよね。
単純に入力された数字文字列を数値化してそれを文字として表示すれば良いだけでは?
例えば、65と入力された場合、これを数値の65に変換しますよね。
この時点で既に文字コードになっているわけなので表示可能なコードの範囲なら
そのまま文字扱いで表示すれば、見た目には文字として表示されます。

例えば、Cでコンソールプログラムなら
int iData = atoi("65");
printf("%c\n", (char)iData);
で、画面にはAと表示されると思います。

επιστημη [HomePage] 2007/10/29(月) 16:40:45
え? 数値から文字への変換なの?

#include <iostream>

int main(){
  std::cout << (char)65 << std::endl; // 'C'
}

ゴマ 2007/10/30(火) 15:09:27
放置すいません。
Windowsアプリです。

Blue 2007/10/30(火) 15:27:25
>Windowsアプリです。
回答は付いていると思いますが。

>CLRならString^型変数からEncoding::ASCIIあたりで取得できるかな。
>(String::ToCharArrayメソッドでもいけそうですけど。)

たとえば、

String^ s = this->TextBox1->Text;
array<Char>^ a = s->ToCharArray();
if (a->Length > 0)
    MessageBox::Show(L"一文字目のアスキーコードは" + ((int)a[0]).ToString());


真面目にやるなら

String^ s = this->TextBox1->Text;
array<Byte>^ a = System::Text::ASCIIEncoding().GetBytes(s);
if (a->Length > 0)
    MessageBox::Show(L"一文字目のアスキーコードは" + ((int)a[0]).ToString());

Blue 2007/10/30(火) 15:33:01
逆なら

String^ s = this->TextBox1->Text;
Char c = (Char)int::Parse(s);

MessageBox::Show(c.ToString());

or

String^ s = this->TextBox1->Text;
array<Byte>^ a = {Byte::Parse(s)}; 
String^ s2 = System::Text::ASCIIEncoding().GetString(a);
MessageBox::Show(s2);

ゴマ 2007/10/30(火) 16:22:25
Blueさん。解答ありがとうございます。
エラーは出ないんですが

warning C4244: '初期化中' : 'wchar_t' から 'char' への変換です。データが失われ
る可能性があります。

と出てしまいます。
これはシカトしても大丈夫なんでしょうか?

Blue 2007/10/30(火) 16:49:37
どれで?

うまいことキャストすればいいのでは?

それと、
>this->TextBox1->Text
の文字はASCIIコードの範囲(0〜127)にならないと変換できませんので。
(それ以上の値を変換したいならコードは何でってことになります。)

ゴマ 2007/10/30(火) 17:04:34
自分のソースではこのように書いています。

public:String^ Ascii_Conversion(String^ nyuryoku4){

           char code = (Char)int::Parse(nyuryoku4);

           return code.ToString();
           

         }

ですが、入力値がそのまま返ってくるだけで変換してくれません。
なんでなんでしょうか?

Blue 2007/10/30(火) 17:12:22
char型とChar型(System::Char構造体)は全く違うものです。
よって、Char型からchar型の値に入れる時、2バイトの数値を1バイトの数値に入れよ
うとするので当然桁落ちします。

char型と同じサイズの型はByte型(System::Byte構造体)です。
(そのままchar型で使っても問題はない)

>入力値がそのまま返ってくるだけで
char.ToStringメソッドで数字になるはずですが?

入力値はなにで何を返すことを期待しているのでしょうか?

ゴマ 2007/10/30(火) 17:19:37
[[解決]]
整数を入力してその整数に対応するアスキーコードを出したかったのですが、
char code = (Char)int::Parse(nyuryoku4);
を
Char code = (Char)int::Parse(nyuryoku4);
としたら期待通りに変換されました。
質問内容も至らないところだらけですみません。
ありがとうございました。

古いスレッドには追加発言できません。