2012-05-12 25 views
4

私は、例えば40のような値を含む変数unsigned charを持っています。 int変数がその値を取得したい。 これを行う最も単純で効率的な方法は何ですか? ありがとうございます。C++のunsigned charからintへ

答えて

12
unsigned char c = 40; 
int i = c; 

おそらくそれよりもあなたの質問に多く存在しなければならない...

+0

私はprintf関数を記述する場合( "C:X%" は、C)Iは32、私はINT I = Cを書き込む取得し、私が印刷するとき、 "i" はI 50を取得! – user1346664

+5

@ user1346664: '%x'は16進数で表示されます。 32の16進数は50の小数に等しくなります。代わりに '%d'を使用してください。 –

+0

本当に... THankss – user1346664

1

Google通常便利なツールですが、答えは非常に簡単です:

unsigned char a = 'A' 
int b = a 
-1
char *a="40"; 
int i= a; 

値'a'には40のASCII値が入ります(40にはなりません)。この関数は、文字列のためにあるので

は、代わりに

ちょうど注意するstdlib.hで定義されたstrtolは()関数を使用してみてください。それは文字のために動作しません

+2

'a'(と' i')*の値は、あなたが今割り当てた値であるので、40になります。 –

+1

コンパイラの警告を無視すると、 'i'が文字列" 40 "が格納されているアドレスを取得することがわかります。もちろん、 'a'にはそのアドレスが格納されています。ああ、その愚かなANSI標準の事の前に、良いオレの前に戻ってきます.Cが弱く型付けされたとき、プログラマーはより強い心を持ち、コカコーラは本当の砂糖で作られました!バハ!最近の子供たち..! Bah !! –

+1

質問はunsigned charに関するものでした。なぜあなたはchar *を使用していますか? – Aamir

2

実際には、これは暗黙のキャストです。つまり、値がオーバーフローまたはアンダーフローしないように自動的にキャストされます。

これは一例です:

unsigned char a = 'A'; 
doSomething(a); // Implicit cast 

double b = 3.14; 
doSomething((int)b); // Explicit cast neccesary! 

void doSomething(int x) 
{ 
... 
} 
+0

double-> intのために明示的なキャストが必要なのはなぜですか?それは暗黙のうちに切り捨てられませんか? – chris

+0

はい、そうですが、コンパイラの警告が表示されるので、そうすることをお勧めします。 – bytecode77

+0

奇妙なことに、私はGCCの最高レベルの警告を受け取りません。 – chris

2

はあなたが何をしたいかによって異なります。

ASCIIコードとして値を読み取るために、あなたは変換すること

char a = 'a'; 
int ia = (int)a; 
/* note that the int cast is not necessary -- int ia = a would suffice */ 

を書くことができます文字 '0' - > 0、 '1' - > 1などを書くことができます。

4

以下のいずれかを試してみてください。より具体的なキャストが必要な場合は、Boostのlexical_castreinterpret_castを確認することができます。

unsigned char c = 40; 
int i = static_cast<int>(c); 
std::cout << i << std::endl; 

または:

unsigned char c = 40; 
int i = (int)(c); 
std::cout << i << std::endl; 
関連する問題