Приведите целое число к буквенному массиву char в C - PullRequest
0 голосов
/ 11 апреля 2020

Я хочу привести (длинное) целое число в массив символов в C. Так, например:

int a = 65;

// I would like to get: "65"
// But I am having the conversion to the corresponding ascii when I do:

printf("%c", (char) a);
// "A"

РЕДАКТИРОВАТЬ: В моем примере я печатаю, но на самом деле я хочу сохранить символ в переменной для дальнейшей манипуляции.

Я думаю, что это должно быть очень простым вопросом, но мне не удалось найти ответ, поэтому я подумал, что, возможно, я не правильно ставлю вопрос. Так что, если кто-нибудь сможет исправить формулировку вопроса, я тоже буду благодарен.

Ответы [ 4 ]

2 голосов
/ 11 апреля 2020

%c строка форматера будет выводить символ. Используйте %d для отображения целого числа вместо

printf("%d", (char)a);
1 голос
/ 11 апреля 2020

Я думаю, вы хотите сделать что-то вроде:

char ch1 = (char)97;  //ch1 = 'a'
char ch2 = (char)98;  // ch2 = 'b'

printf("ch1: %c, ch2: %c\n", ch1, ch2);
printf("ch1: %c, ch2: %c\n", 97, 98);
char str[3];
// store value 97 in to str[3]
sprintf(str, "%d", 97);
printf("str: %s", str);

Тест:

#include<stdio.h>

int main(void)
{
    char ch1 = (char)97;  //ch1 = 'a'
    char ch2 = (char)98;  //ch2 = 'b'

    printf("ch1: %c, ch2: %c", ch1, ch2);
    printf("ch1: %c, ch2: %c", 97, 98);

    char str[3];
     // store value 97 in to str[3]
    sprintf(str, "%d", 97);
    printf("str: %s", str);
    return 0;
}
0 голосов
/ 11 апреля 2020

Basi c пример хранения int переменной в массиве char . Помните, что ограничивает значения различных типов переменных, таких как char.

#include <stdio.h>
#include <limits.h>

int main(void) {
    int a = CHAR_MAX;
    unsigned char b[1];

    b[0] = (unsigned char) a;

    printf("%d\n", a);
    printf("%hhd\n", b[0]);

    return (0);
}

Вывод:

➜  Desktop gcc -Wall -Werror -Wextra main.c
➜  Desktop ./a.out
127
127

Если вы хотите преобразовать свое int в char массив, а не просто приведение, тогда вам, вероятно, понадобится собственная реализация функции itoa (), например:

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

char* itoa(int val, int base){

    static char buf[32] = {0};

    int i = 30;

    for(; val && i ; --i, val /= base)

        buf[i] = "0123456789abcdef"[val % base];

    return &buf[i+1];

}

int main(void) {
    int a = 127;

    printf("Value = %s\n", itoa(a, 10));

    return (0);
}

Вывод:

➜  Desktop gcc -Wall -Wextra -Werror file.c
➜  Desktop ./a.out
Value = 127
0 голосов
/ 11 апреля 2020

Приведения обычно используются для преобразования между встроенными типами данных фиксированного размера с различной шириной или семантикой (ie, расширением одного типа на более широкий, усечением широкого типа до более узкого или сообщением компилятору, что мы теперь рассмотрим что-то «подписанное» или «без знака»).

Форматирование строки не похоже на приведение: строки не являются типом данных фиксированного размера, и существует множество способов форматирования того же целого числа, что и строка ( наиболее очевидно, что существует несколько общих баз).

Вы уже используете printf, поэтому вы можете просто использовать snprintf, чтобы записать строку в массив char вместо из на стандартный вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...