我需要获取char的十进制ascii值。直到现在使用它来打印它(避免负值)没有问题。
char x;
cout << dec << (int)x << endl;
当我想将dec
值分配给int
变量时,问题就出现了,dec
无法在cout
之外使用。有什么建议怎么做?请注意,(int) char
不会起作用,因为我也会得到负值,我想避免它们。
我已尝试使用atoi
和unsigned int
,但到目前为止,没有运气。
答案 0 :(得分:2)
将char
类型的对象强制转换为unsigned char
类型的对象就足够了。例如
char c = CHAR_MIN;
int x = ( unsigned char )c;
或
int x = static_cast<unsigned char>( c );
答案 1 :(得分: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;
}
答案 2 :(得分:0)
在C ++中使用static_cast<int>( someCharValue )
将signed char
(和unsigned char
)值转换为整数 - 但这不是一个有意义的操作,因为char
无论如何都是整数类型
如果你想要一个十进制字符串,那么使用C ++ 11&#39 {s} 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。
答案 3 :(得分:0)
您可以通过显式转换或隐式转换将字符转换为整数:
int a = 'a'; // implicit conversion
cout << a << endl; // 97
int A = (int)'A'; explicit conversion
cout << a << endl; // 65