[C++] Преобразование char в int в C и C ++


Answers

C и C ++ всегда поддерживают типы, по крайней мере, для int . Кроме того, символьные литералы имеют тип int в C и char в C ++.

Вы можете преобразовать тип char просто назначив int .

char c = 'a'; // narrowing on C
int a = c;
Question

Как преобразовать char в int в C и C ++?




Использовать static_cast<int> :

int num = static_cast<int>(letter); // if letter='a', num=97

Изменить: вы, вероятно, должны стараться избегать использования (int)

int num = (int) буква;

check Зачем использовать static_cast <int> (x) вместо (int) x? для получения дополнительной информации.




У меня есть абсолютно null навыки в C, но для простого разбора:

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 + pow(n, x);
    }
    return sum;
}

int powInt(int x, int y)
{
    for (int i = 0; i < y; i++)
    {
        x *= 10;
    }
    return x;
}



char - всего 1 байтовое целое число. С типом char нет ничего волшебного! Так же, как вы можете назначить короткий для int или int long, вы можете назначить char для int.

Да, имя примитивного типа данных оказывается «char», что указывает на то, что оно должно содержать только символы. Но на самом деле «char» - это просто плохой выбор имени, чтобы смутить всех, кто пытается выучить язык. Лучшее имя для него - int8_t, и вы можете использовать это имя вместо этого, если ваш компилятор следует последнему стандарту C.

Хотя, конечно, вы должны использовать тип char при выполнении обработки строк, потому что индекс классической таблицы ASCII соответствует 1 байту. Тем не менее, вы могли бы обрабатывать строки с помощью обычных ints, хотя в реальном мире нет практической причины, почему вы когда-либо захотите это сделать. Например, следующий код будет работать отлично:

  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.




У меня возникли проблемы с преобразованием массива символов типа "7c7c7d7d7d7d7c7c7c7d7d7d7d7c7c7c7c7c7c7d7d7c7c7c7c7d7c7d7d7d7c7c2e2e2e" в его фактическое целочисленное значение, которое могло бы быть представлено "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;
}

Надеюсь, поможет!