文字列や文字から整数への変換方法について
文字列(string型)や文字(char型)から整数(int型など)に変換
する時のルールがよく解りません。
たとえば、キーボードから数字を打って、その入力された数字を
数値として整数型の変数に代入したい場合のやり方です。
ちょっとプログラムを作ってみました。
using System;
class clmain
{
private static void Main()
{
Console.Write("1桁の整数を入れてね ");
char ch = char.Parse(Console.ReadLine());
int by1 = (int)ch;
int by2 = (int)char.GetNumericValue(ch);
Console.WriteLine("by1 = {0}, by2 = {1}, ch = {1}", by1, by2, ch);
Console.Write("整数を入れてね ");
string st = Console.ReadLine();
/* by = (int)st; コンパイルエラー */
int by3 = int.Parse(st);
Console.WriteLine("by3 = {0}, st = {1}", by3, st);
}
}
まず、char型からint型への変換では、
int型変数=(int)char型変数;
はコンパイルは通りますけど、実行すると全く違った値が入って
しまいます。たとえば char型変数の値が "1" だと、int型変数には
49 が入ります。
int型変数 = (int)char.GetNumericValue(char型変数);
と書いてようやく、思い通りの動きをしてくれます。
また、string型からint型への変換では
int型変数=(int)string型変数;
はコンパイルエラーになります。
int型変数 = int.Parse(string型変数);
とするとコンパイル出来て正しく動きます。
これで質問ですけど、
(1)なぜstring型とchar型で、int型への変換方法が違うのでしょうか?
(2)int型変数=(int)char型変数; とすると、上に書いたように、全く
違った(希望しない)値が代入されてしまいます。これは、どういう
動きをしているのでしょうか? また、これはコンパイルエラーに
なりませんけど、どういう時にこの書き方をするのでしょうか?
解る方、お願いします。
お礼
わかりました。 ご丁寧にありがとうございました