2016-11-21 3 views
0

Мне нужно получить десятичное значение ascii символа. До сих пор не было никаких проблем с его печатью (избегая отрицательных значений).Получить десятичное значение ascii char

char x; 
cout << dec << (int)x << endl; 

Проблема возникает, когда я хочу, чтобы присвоить значение dec к int переменной, dec не могут быть использованы за пределами cout. Любое предложение, как это сделать? Обратите внимание, что (int) char не будет работать, так как я получу отрицательные значения, и я хочу их избежать.

Я уже пробовал с atoi и unsigned int, но до сих пор не повезло.

+0

почему '<< dec' это излишним – Raindrop7

+0

Вы не можете предположить, ASCII используется - или какой-либо конкретной кодирование. C и C++ якобы кодируют агностик - ваша программа может быть запущена в среде, использующей, например, EBCDIC. – Dai

+2

'cout << (int) x;' not '(int) char' – Raindrop7

ответ

0

В C++ использовать static_cast<int>(someCharValue) для преобразования значения в signed charunsigned char) в целое число - но это не имеет смысла, так как операция char представляет собой целое число типа в любом случае.

Если вы хотите десятичную строку затем использовать C++ 11 в std::to_string функции:

#include <string> 

using namespace std; 

char someChar = 'A'; 
int someCharAsInteger = static_cast<int>(someChar); // this step is unnecessary, but it's to demonstrate that they're all just integers. 
string someCharsNumericIntegerValueAsDecimalString1 = to_string(someChar); // as there is no `to_string(char)` implicit upsizing to `int` will occur. 
string someCharsNumericIntegerValueAsDecimalString2 = to_string(someCharAsInteger); 

cout << someCharsNumericIntegerValueAsDecimalString1 << endl; 
cout << someCharsNumericIntegerValueAsDecimalString2 << endl; 

Это будет выход этого:

65 
65 

... при условии, ваша система ASCII.

+0

Будет проверять завтра и сообщать вам. – Capie

1

Достаточно лишить объект типа char объекту типа unsigned char. Например

char c = CHAR_MIN; 

int x = (unsigned char)c; 

или

int x = static_cast<unsigned char>(c); 
0

вы можете привести символ в целое либо через явное преобразование или неявные один:

int a = 'a'; // implicit conversion 
cout << a << endl; // 97 

int A = (int)'A'; explicit conversion 
cout << a << endl; // 65 
1

это зависит от реализации компилятора, некоторые компиляторы реализуют char как unsigned и разрешают расширенные символы ASCII (http://www.ascii-code.com/) , ниже двух ссылок имеет тот же код и только один работает http://ideone.com/72Iiaz // использует GCC C++ 4. * и не компилирует http://ideone.com/hbmBK6 // использует C++ 14

#include<iostream> 
using namespace std; 


int main(){ 
    char ch = 'x'; 
    int num = ch; 
    cout<<ch<<" => " << num << endl; 
    ch = 'µ'; // should now have an extended ascii character 
    num = ch; 
    cout<<ch<<" => " << num << endl; 
    cout<<" using unsigned "<< (unsigned int) 'µ'; 
    return 0; 
} 
Смежные вопросы