2012-05-12 116 views
4

我有一個變量的無符號字符包含一個值,例如40。 我想要一個int變量來獲取該值。 什麼是最簡單和最有效的方法呢? 非常感謝。無符號字符爲int在C + +

回答

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

想必一定有更多的你的問題比...

+0

如果我寫的printf( 「C:%X」,c)中,我得到32.然後我寫INT I = c和當我打印的 「i」 我得到50 ! – user1346664

+5

@ user1346664:'%x'以十六進制打印。 32十六進制等於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語氣微弱時,程序員思維更加強硬,可口可樂用真正的糖做成了!呸!孩子們這些日子..!呸!! –

+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等,您可以編寫

char a = '4'; 
int ia = a - '0'; 
/* check here if ia is bounded by 0 and 9 */ 
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;