如何在C和c++中将字符转换为int ?
当前回答
Char只是一个1字节的整数。char类型没有什么神奇之处!就像你可以将short类型赋值给int类型,或将int类型赋值给long类型一样,你也可以将char类型赋值给int类型。
是的,原始数据类型的名称恰好是“char”,这暗示它应该只包含字符。但实际上,“char”只是一个糟糕的名字选择,会让每个试图学习这门语言的人感到困惑。更好的名称是int8_t,如果您的编译器遵循最新的C标准,则可以使用该名称。
当然,在进行字符串处理时应该使用char类型,因为经典ASCII表的索引适合1个字节。不过,您也可以使用常规int类型进行字符串处理,尽管在现实世界中没有任何实际原因可以解释为什么要这样做。例如,下面的代码将完美地工作:
int str[] = {'h', 'e', 'l', 'l', 'o', '\0' };
for(i=0; i<6; i++)
{
printf("%c", str[i]);
}
你必须意识到字符和字符串只是数字,就像计算机中的其他东西一样。当您在源代码中写入'a'时,它会被预处理为数字97,这是一个整数常数。
如果你写一个表达式
char ch = '5';
ch = ch - '0';
这实际上等价于
char ch = (int)53;
ch = ch - (int)48;
然后通过C语言的整数提升
ch = (int)ch - (int)48;
然后截断为一个字符以适应结果类型
ch = (char)( (int)ch - (int)48 );
行与行之间有很多微妙的东西,其中char被隐式地当作int。
其他回答
嗯,在ASCII码中,数字(数字)从48开始。你所需要做的就是:
int x = (int)character - 48;
或者,因为字符'0'的ASCII码是48,你可以这样写:
int x = character - '0'; // The (int) cast is not necessary.
我建议使用以下函数:
/* chartoint: convert char simbols to unsigned int*/
int chartoint(char s[])
{
int i, n;
n = 0;
for (i = 0; isdigit(s[i]); ++i){
n = 10 * n + (s[i] - '0');
}
return n;
}
函数的结果可以通过以下方法检查:
printf("char 00: %d \r\n", chartoint("00"));
printf("char 01: %d \r\n", chartoint("01"));
printf("char 255: %d \r\n", chartoint("255"));
对于char或short to int,只需要赋值。
char ch = 16;
int in = ch;
与int64相同。
long long lo = ch;
所有值都是16。
使用“long long”而不是“int”,这样它适用于更大的数字。这里是优雅的解决方案。
long long ChardToint(char *arr, size_t len){
int toptenf=1;
long long toptenLf=10000000LL;
long long makeintf=3000000000000;
makeintf= 0LL;
int holdNumberf=0;
for(int i=len-1;i>=0 ;i--){
switch(arr[i]){
case '0':
holdNumberf=0;
break;
case '1':
holdNumberf=1;
break;
case '2':
holdNumberf=2;
break;
case '3':
holdNumberf=3;
break;
case '4':
holdNumberf=4;
break;
case '5':
holdNumberf=5;
break;
case '6':
holdNumberf=6;
break;
case '7':
holdNumberf=7;
break;
case '8':
holdNumberf=8;
break;
case '9':
holdNumberf=9;
break;
default:
holdNumberf=0;
}
if(toptenf>=10000000){
makeintf=makeintf+holdNumberf*toptenLf;
toptenLf=toptenLf*10;
}else{
makeintf=makeintf+holdNumberf*toptenf;
toptenf=toptenf*10;
}
}
return makeintf;
}
这取决于你想做什么:
如果要以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 */
解释: A - '0'等价于((int) A) - ((int)'0'),这意味着字符的ASCII值相互相减。因为在ascii表中0直接出现在1之前(以此类推,直到9),两者之间的差就给出了字符a所代表的数字。
推荐文章
- 如何将文件指针(file * fp)转换为文件描述符(int fd)?
- 如何在Go中使用c++
- 自定义c++分配器的引人注目的例子?
- RAII和c++中的智能指针
- 如何构建和使用谷歌TensorFlow c++ api
- C“int”的大小是2字节还是4字节?
- 多维数组如何在内存中格式化?
- printf()和puts()在C语言中的区别是什么?
- 断言是邪恶的吗?
- 下面这些短语在c++中是什么意思:0 -,default-和value-initialization?
- 在STL地图中,使用map::insert比[]更好吗?
- C++ Linux的想法?
- 有效,但毫无价值的语法在开关情况下?
- 如何为Fedora安装g++ ?
- Std::cin输入空格?