ASCIIコード変換 – プログラミング – Home

通知
すべてクリア

[解決済] ASCIIコード変換


ゴマ
 ゴマ
(@ゴマ)
ゲスト
結合: 24年前
投稿: 28
Topic starter  

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


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

#include <iostream>

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


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

入力とはどこから?

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

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

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

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


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

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と表示されると思います。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

え? 数値から文字への変換なの?

#include <iostream>

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


返信引用
ゴマ
 ゴマ
(@ゴマ)
ゲスト
結合: 24年前
投稿: 28
Topic starter  

放置すいません。
Windowsアプリです。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>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
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

逆なら

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);


返信引用
ゴマ
 ゴマ
(@ゴマ)
ゲスト
結合: 24年前
投稿: 28
Topic starter  

Blueさん。解答ありがとうございます。
エラーは出ないんですが

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

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


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

どれで?

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

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


返信引用
ゴマ
 ゴマ
(@ゴマ)
ゲスト
結合: 24年前
投稿: 28
Topic starter  

自分のソースではこのように書いています。

public:String^ Ascii_Conversion(String^ nyuryoku4){

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

return code.ToString();

}

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


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

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

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

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

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


返信引用
ゴマ
 ゴマ
(@ゴマ)
ゲスト
結合: 24年前
投稿: 28
Topic starter  

整数を入力してその整数に対応するアスキーコードを出したかったのですが、
char code = (Char)int::Parse(nyuryoku4);

Char code = (Char)int::Parse(nyuryoku4);
としたら期待通りに変換されました。
質問内容も至らないところだらけですみません。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました