2012-05-12 81 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;