如何转换char成intC和C ++?
c和c++,我认为两种语言面对的答案都是合理的。
                char。
                如何转换char成intC和C ++?
c和c++,我认为两种语言面对的答案都是合理的。
                char。
                Answers:
取决于您要做什么:
读取值作为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值彼此相减。由于0紧接1在ascii表中的前面(依此类推,直到9),因此两者之间的差异给出了该字符a代表的数字。
&-> -10),并且为您提供大于10的数字(如x-> 26)
                    '1'提供的ascii不是1,则需要删除偏移量'0'以将其重新对齐以从0-9开始计数。连续数字1-9在ascii整数数字中相邻。
                    C和C ++总是将类型至少提升为int。此外,字符文字int在C和charC ++中都是类型。
您char只需分配一个即可转换类型int。
char c = 'a'; // narrowing on C
int a = c;
              operator+()。
                    int a = c;)将保留C标准库函数无法处理的任何负值。C标准库函数设置了将char值处理为的标准int。
                    char只是1个字节的整数。char类型没有什么魔术!正如可以将int分配给short或将int分配给long一样,可以将char分配给int。
是的,原始数据类型的名称恰好是“ 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;
然后截断为char以适合结果类型
ch = (char)( (int)ch - (int)48 );
在行之间有很多这样的微妙的事情,其中char被隐式地视为一个int。
ascii,因此您不应采用任何特定的编码。将charequal 设置为true int8_t是错误的,因为它可能同样是uint8_tor uint24_t。
                    char始终为1个字节,如果给定系统上的类型int8_t/ uint8_t存在(很有可能),则它们将能够满足a的结果char,因为它将是8位。在高度陌生的系统(例如各种过时的DSP)上,char将为16位,并且uint8_t将不存在。编写与过时的DSP兼容的代码是胡说八道,为与一个人的补码或符号和幅度系统兼容而编写的代码也没有意义。因为这样的系统在现实世界中几乎不存在,所以浪费了大量时间。
                    (此答案解决了C ++方面的问题,但C中也存在符号扩展问题。)
处理这三种char类型(signed,unsigned和char)比它最初看起来要精致得多。介于0到SCHAR_MAX(8位为127 char)之间的值很容易:
char c = somevalue;
signed char sc = c;
unsigned char uc = c;
int n = c;
但是,当somevalue超出该范围时,只有经过这三种类型unsigned char的“相同” char值,您才能获得一致的结果:
char c = somevalue;
signed char sc = c;
unsigned char uc = c;
// Might not be true: int(c) == int(sc) and int(c) == int(uc).
int nc = (unsigned char)c;
int nsc = (unsigned char)sc;
int nuc = (unsigned char)uc;
// Always true: nc == nsc and nc == nuc.
当使用ctype.h中的函数(例如isupper或)时toupper,由于符号扩展,这一点很重要:
char c = negative_char;  // Assuming CHAR_MIN < 0.
int n = c;
bool b = isupper(n);  // Undefined behavior.
注意,通过int进行的转换是隐式的;这具有相同的UB:
char c = negative_char;
bool b = isupper(c);
要解决此问题,请仔细阅读unsigned char,这很容易通过使用safe_ctype包装ctype.h函数来完成:
template<int (&F)(int)>
int safe_ctype(unsigned char c) { return F(c); }
//...
char c = CHAR_MIN;
bool b = safe_ctype<isupper>(c);  // No UB.
std::string s = "value that may contain negative chars; e.g. user input";
std::transform(s.begin(), s.end(), s.begin(), &safe_ctype<toupper>);
// Must wrap toupper to eliminate UB in this case, you can't cast
// to unsigned char because the function is called inside transform.
之所以可行,是因为任何采用三种字符类型的函数都可以采用另外两种字符类型。它导致两个可以处理任何类型的函数:
int ord(char c) { return (unsigned char)c; }
char chr(int n) {
  assert(0 <= n);  // Or other error-/sanity-checking.
  assert(n <= UCHAR_MAX);
  return (unsigned char)n;
}
// Ord and chr are named to match similar functions in other languages
// and libraries.
ord(c)始终会为您提供非负值(即使传递的是负值char或负值)signed char,并且chr会ord产生任何值并返回完全相同的值char。
在实践中,我可能只是强制转换unsigned char而不是使用它们,但是它们确实简洁地包装了转换,提供了一个方便的位置来添加对int-to-的错误检查char,并且在需要多次使用它们时会更短,更清晰在附近。
用途static_cast<int>:
int num = static_cast<int>(letter); // if letter='a', num=97
编辑:您可能应该避免使用(int)
int num =(int)字母;
退房为什么使用static_cast <int>(x)而不是(int)x?有关更多信息。
我对nullC 有绝对的技能,但需要进行简单的分析:     
char* something = "123456";
int number = parseInt(something);
...这对我有用:
int parseInt(char* chars)
{
    int sum = 0;
    int len = strlen(chars);
    for (int x = 0; x < len; x++)
    {
        int n = chars[len - (x + 1)] - '0';
        sum = sum + powInt(n, x);
    }
    return sum;
}
int powInt(int x, int y)
{
    for (int i = 0; i < y; i++)
    {
        x *= 10;
    }
    return x;
}
              大概您希望使用C标准库中的函数进行此转换。
在这种情况下,请执行(C ++语法)
typedef unsigned char UChar;
char myCppFunc( char c )
{
    return char( someCFunc( UChar( c ) ) );
}
表达式UChar( c )转换为unsigned char以消除负值,C函数不支持EOF除外的负值。
然后,将该表达式的结果用作int形式参数的实际参数。您会自动升级到int。您也可以选择明确地写上最后一步,例如int( UChar( c ) ),但是个人觉得太冗长了。
干杯,……
我在将一个char数组转换"7c7c7d7d7d7d7c7c7c7d7d7d7d7c7c7c7c7c7c7d7d7c7c7c7c7d7c7d7d7d7c7c2e2e2e"为它的实际整数值时遇到问题,该值可以由7C表示为一个十六进制值。因此,在寻求帮助之后,我创建了这个,并认为分享是一件很酷的事情。
这会将char字符串分成正确的整数,这可能对不仅仅是我自己的人有更多帮助;)
unsigned int* char2int(char *a, int len)
{
    int i,u;
    unsigned int *val = malloc(len*sizeof(unsigned long));
    for(i=0,u=0;i<len;i++){
        if(i%2==0){
            if(a[i] <= 57)
                val[u] = (a[i]-50)<<4;
            else
                val[u] = (a[i]-55)<<4;
        }
        else{
            if(a[i] <= 57)
                val[u] += (a[i]-50);
            else
                val[u] += (a[i]-55);
            u++;
        }
    }
    return val;
}
希望能帮助到你!
int charToint(char a){
char *p = &a;
int k = atoi(p);
return k;
}
您可以使用此atoi方法将char转换为int。欲了解更多信息,你可以参考这个http://www.cplusplus.com/reference/cstdlib/atoi/,http://www.cplusplus.com/reference/string/stoi/。