Visual C++ 2005 Express Edition マネージ形式
半角英数字記号からASCIIコードを取得するにはどうしたら良いでしょうか?
VB6ではAsc() を使い A ==> 65 が取得出来るのですが、
>半角英数字記号からASCIIコードを取得するにはどうしたら良いでしょうか?
?
その「半角英数字記号」はどこから入力されるものなんですか?
標準入力で「A」とタイプしたら「65」と表示したいってことですか?
>半角英数字記号
だけなら別にそのまま取得できるのでは?
System::Char c = L'A';
int n = (int)c;
char c = 'A';
int n = (int)c;
wchar_t c = L'A';
int n = (int)c;
System::String s = "A";
int n = (int)s.ToCharArray()[0]; // int n = (int)s[0]; でもOKなはず
訂正
>System::String s = "A";
>int n = (int)s.ToCharArray()[0]; // int n = (int)s[0]; でもOKなはず
System::String^ s = "A";
int n = (int)s->ToCharArray()[0]; // int n = (int)s[0]; でもOKなはず
Blue さん、
Web検索している間に数回も書いて頂きましてありがとうございます。
今までも他の事でもWeb検索を何回かしているのですが
自分に理解出来るものが無くて手こずっています。
> その「半角英数字記号」はどこから入力されるものなんですか?
現在はテスト中なので変数に文字をセットしてます。
最終的には文字列(例 ABCD とか)から一文字ずつ抜き出して
順次ASCIIコードに変換...の積もりでいます。
MSのページの「ランタイム ライブラリ リファレンス」で__toascii を
見つけたのですがこのページの説明だけでは分からずに
Web検索で見つけたコードを下記の様に修正して A ==> 65 が
取得されている事がわかりました。 (デバッグモード)
char *p;
p = "A";
int as;
as = __toascii(*p);
今回 Blue さん が提示してくれたサンプル4ケを試しました。
1〜3は65が取得されましたが4はゼロでした。
訂正後のコードおよび 「 int n = (int)s[0]; でもOKなはず」の方も。
理由はまだ不勉強のために分かりません。
便乗質問で申し訳ないのですが、もう一つ教えて下さい。
数値をテキストボックスに表示するには型変換をしないとダメの様ですが、
参考書やWebを見ても初歩的なコードに当たりません。
textBox1->Text = n;
便乗のほうから
ToStringメソッドを使えばいいです。
もしくはString::Formatとか。
>1〜3は65が取得されましたが4はゼロでした。
0でしたか。
実行環境がないので憶測で答えているところですから間違っているのかも。
ちなみにどんなことをしているのかというと、
System::Stirng s = "ABC";
array<System::Char>^ ca = s->ToCharArray(); // 文字の並びを取得
Char c = ca[0]; // 先頭の要素を取得
int n = (int)c; // キャストは要らないかも
ということをしています。
ただし、これらはすべて
>半角英数字記号
でASCIIコードを取得するという前提にしています。
それ以外のものがあったときASCIIコードが取得できるという保障はないです。
場合によってはエンコードする必要が出てくるでしょう。
ついで。
マネージドいっさい関係ないところであれば
char s[] = "ABC";
int n;
n = s[0]; // 65
n = s[1]; // 66
n = s[2]; // 67
n = s[3]; // 0(終端文字)
と簡単に取得できます。
Blue さん、ありがとうございます。
ToStringメソッド および String::Format を調べて
テストして見ます。
Blue さん、ありがとうございます。
提示していただいた、どちらも上手く行きました。
textBox1->Text = n.ToString(); // OK
textBox1->Text = String::Format("{0}",n); // OK
>場合によってはエンコードする必要が出てくるでしょう。
参考
int main(array<System::String^>^ args)
{
System::String^ s = "ABCあいうえお";
for each (System::Char c in s)
System::Console::WriteLine("{0:x}", (int)c);
System::Console::WriteLine("----");
for each (System::Byte b in System::Text::Encoding::ASCII::GetBytes(s))
System::Console::WriteLine("{0:x}", b);
System::Console::WriteLine("----");
for each (System::Byte b in System::Text::Encoding::GetEncoding(932)::GetBytes(s)) // Shift_JIS
System::Console::WriteLine("{0:x}", b);
}
Blue さん、ありがとうございました。
編集 削除