【问题标题】:Convert a char to an int in C在 C 中将 char 转换为 int
【发布时间】:2013-08-10 22:45:15
【问题描述】:

我想制作一个程序,将3www2as3com0 转换为www.as.com,但一开始我遇到了麻烦;我想将字符串的第一个数字(字符 3)转换为整数以使用 strncpystrchr 等函数,所以当我打印转换后的 int 时,程序显示 51 而不是 3。有什么问题?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char** argv) {

    /* argv[1]--->3www2as3com0*/

    char *string;
    char *p;  

    string=argv[1];
    p=string;

    char cond,cond2;

    cond=*p; //I want to have in cond the number 3

    cond2=(int)cond; //I want to convert cond (a char) to cond2(an int)

    printf("%d",cond2); //It print me 51 instead of 3

    return (EXIT_SUCCESS);
}

【问题讨论】:

    标签: c pointers casting char int


    【解决方案1】:

    您的计算机显然在称为 ASCII 的方案中对字符串进行编码。 (我相当确定大多数现代计算机使用 ASCII 或超集,例如 UTF-8 来表示 char* 字符串)。

    请注意可打印和不可打印字符是如何编码为数字的。 51 是字符“3”的编号。

    ASCII 的一个很好的特性是所有数字都有从 '0' 开始的递增代码。

    这允许人们通过计算aDigitCharacter - '0'来获得一个数字的数值。

    例如:cond2 = cond - '0';

    编辑:

    您还应该仔细检查该字符是否确实是一个数字,确保它位于'0''9' 之间;

    如果要将包含多个数字的字符串转换为数字,则可能需要使用atoi。 可以在&lt;stdlib.h&gt;找到。

    【讨论】:

    • FWIW,C 标准要求数字在实现的字符集中是连续的,因此即使您的系统使用不同的字符集,这种技术也可以正常工作。
    【解决方案2】:

    字符的整数值是数字的 ASCII 码,而不是它实际代表的数字。你可以通过减去'0'来转换。

    if( c >= '0' && c <= '9' ) val = c - '0';
    

    【讨论】:

      【解决方案3】:

      似乎你使用的字符串永远不会有负数,所以你可以使用 atoi(),从 char 返回整数值。如果它遇到不是数字的东西,它会得到直到那时积累的数字。

      【讨论】:

        猜你喜欢
        • 2014-02-07
        • 2018-02-10
        • 2010-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-18
        • 2015-01-29
        相关资源
        最近更新 更多