2012-05-12 2 views
4

У меня есть переменная unsigned char, которая содержит значение 40, например. Я хочу, чтобы переменная int получала это значение. Какой самый простой и эффективный способ сделать это? спасибо.unsigned char to int in C++

ответ

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

Предположительно должно быть больше на ваш вопрос, чем ...

+0

если я пишу Е ("C:% х", с) я получаю 32. Тогда я пишу INT I = С и при печати "я" Я получаю 50 ! – user1346664

+5

@ user1346664: '% x' печатает в шестнадцатеричном формате. 32 hex равен 50 десятичным. Вместо этого используйте '% d'. –

+0

Так верно ... THankss – user1346664

1

Google является полезным инструментом, как правило, но ответ невероятно прост:

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

Значение в 'a' будет значение ASCII 40 (не будет 40).

Вместо попробуйте использовать функцию strtol(), определенный в stdlib.h

Только будьте осторожны, потому что эта функция является строкой. Он не будет работать для символа

+2

Значение 'a' (и' i') * будет * be 40, так как это значение, которое вы только что назначили. –

+1

Если вы проигнорируете предупреждение о компиляторе, вы обнаружите, что 'i' получает адрес, где хранится строка« 40 », что, конечно же, означает« a ». Ах, вернувшись к добрым дням до этой простой спецификации ANSI - назад, когда C был слабо типизирован, у программистов были более сильные умы, а Coca-Cola был сделан с настоящим сахаром! Ба! Дети в эти дни ..! Ба !! –

+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's lexical_cast и reinterpret_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;