将char转换为整数并返回值[C]的函数

时间:2018-06-09 11:26:47

标签: c char integer

所以我试图在C中编写一个函数,将int的变量转换为char。在查看以前的主题时,我注意到最好的方法是使用它:a + '0'

所以我做了:

char intToChar(int a) {
   return a + '0';
}

虽然,我的IDE(Clion)警告我:

  

从返回'char'的函数返回'int':'int'类型的值可能不适合接收器类型'char'

所以我尝试将其更改为以下函数(将char替换为int):

int intToChar(int a) {
    return a + '0';
}

警告消失了。但它让我想知道这是否是正确的方法。我知道当函数返回char时,它实际返回int。但函数的名称是intToChar,所以它应该返回char。这是正确的方法吗?

3 个答案:

答案 0 :(得分:0)

问题是由隐式促销规则引起的。在您的示例中:

a + '0'

您要添加intchar。由于它们不同,因此必须将其中一个转换为另一个。因为char通常是8位而整数通常是32位(在C中并不总是如此,但对于这一点并不重要),实际执行的是:

a + (int)'0'

长话短说,结果将是int。要删除此警告,请执行以下操作:

(char) (a + '0') // or (char)a + '0'

注意:对于您的用例,您只需执行(char)a,结果就是正确的。

答案 1 :(得分:0)

尝试使用此类型的类型转换,但是您应输入ascii值为no,例如在这种情况下,ascii值为2为50。

#include <stdio.h>

char intToChar(int a){

    char c=(char)a;
    return c;
}

int main(void) {
    // your code goes here

    int a=50;
    char c;
    c=intToChar(50);
    printf("%c",c);

    return 0;
}

答案 2 :(得分:0)

字符文字0 - 作为每个字符文字 - 属于int类型(例如,尝试打印sizeof('0')

int main() {
    printf("sizeof '0' is ... %ld\n",sizeof('0'));
}

输出:

sizeof '0' is ... 4

因此像a + '0'这样的表达式也会提供int。然后返回int,其中函数定义返回类型char会导致此警告。

所以实际上你按照你的建议编写了int intToChar(int a),其他基于角色的函数如tolower也是如此。

BTW:请注意,数据类型char与数据类型int不同,因为char始终保证大小为1。

请注意:当您拥有char x = 5;时,x + '0'这样的表达式也会提供int数据类型,因为'0'的类型为int