Преобразование целочисленного значения в символ в C? - PullRequest
1 голос
/ 11 марта 2011

Мне нужно преобразовать целочисленное значение в значение символа в C. Как правильно это сделать?

С уважением ...

Ответы [ 3 ]

6 голосов
/ 11 марта 2011

Они неявно конвертируемые ...

int x = 65;
char c = x; // 'A'
putchar(x);
printf("%c", x);
char asciiz[] = { 65, 32, 66, 32, 67, 0 };

Вы можете сделать это явно, например, с помощью (char)65, особенно полезно в C ++, где перегрузка и шаблоны делают написание кода, который ведет себя по-разному, в зависимости от общего типа.

Если вы действительно хотите получить (возможно, несколько) символьное представление числа, то вы можете использовать printf ("% d", x), чтобы вывести его на стандартный вывод, или:

char buffer[16]; // biggest int is 4 billion so ~10 chars, round up for safety
sprintf(buffer, "%d", x);
// say x was 128, buffer now contains [0] = '1', [1] = '2', [2] = '8', [3] = NUL.
1 голос
/ 11 марта 2011

Простой ответ будет:

(char)my_int;

Однако, простой char может не совсем то, что вы хотите. В Си есть «подписанный символ», «неподписанный символ» и «обычный» char. К сожалению, это реализация, определенная, если обычный char подписан или не подписан. Поэтому, если вы планируете использовать целое число для приведения вниз в среде, где это имеет значение, обязательно выберите правильный тип символа.

0 голосов
/ 11 марта 2011

Если вы хотите получить символьное представление целых цифр 1, 2, 3, 4, 5, 6, 7, 8, 9 и 0, вы можете просто сделать это так:

char ToChar(int value)
{
   assert(value >= 0 && value <= 9);
   return '0' + value;
}

Если вы хотите включить в микс шестнадцатеричные цифры, вы можете сделать это:

char ToChar(int value)
{
   assert(value >= 0 && value <= 15);
   return value < 10 ? '0' + value : 'a' + value - 10;
}

Это будет работать, только если символы в вашем наборе символов упорядочены от «0» до «9». Я никогда не слышал о наборе символов, у которого нет этого свойства.

...