Как преобразовать символ ascii в int в C - PullRequest
16 голосов
/ 16 марта 2011

Как я могу преобразовать символ ascii в int в C?

Ответы [ 8 ]

19 голосов
/ 16 марта 2011

А как же:

int a_as_int = (int)'a';
11 голосов
/ 16 марта 2011

Вы ищете это:

int c = some_ascii_character;

Или просто конвертируете без присваивания:

(int)some_aschii_character;
5 голосов
/ 10 июня 2016

Используйте функцию ASCII to Integer atoi(), которая принимает строку и преобразует ее в целое число:

#include <stdlib.h>

int num = atoi("23"); // 23

Если строка содержит десятичное число, число будет усечено:

int num = atoi("23.21"); // 23
3 голосов
/ 16 марта 2011

Я согласен с Ашотом и Кваном, но, возможно, вам нравится конвертировать ascii-шифр, такой как '7', в int, такой как 7?

Тогда я рекомендую:

char seven = '7';
int i = seven - '0'; 

или, может быть, вы получите предупреждение,

int i = (int) (seven - '0'); 

исправлено после комментариев, спасибо.

2 голосов
/ 16 марта 2011

Значение char в C неявно преобразуется в int.например, char c; ... printf("%d", c) печатает десятичное значение ASCII c, а int i = c; помещает целое значение ASCII c в i.Вы также можете явно конвертировать его с помощью (int)c.Если вы имеете в виду что-то еще, например, как преобразовать цифру ASCII в int, это будет c - '0', что неявно преобразует c в int, а затем вычитает значение ASCII '0', а именно 48 (всимвольные константы, такие как '0', по историческим причинам имеют тип int, а не char).

1 голос
/ 16 марта 2011

Вы имеете в виду порядковый номер ASCII?Попробуйте приведение типа так:

int x = 'a';
0 голосов

Это невозможно с помощью стандартной библиотеки C99 , если вы вручную не записали карту из символьных констант в соответствующее значение ASCII int.

Символьные константы в C, такие как 'a', не обязательно будут ASCII.

C99 дает только некоторые гарантии относительно этих констант, например, чтобы цифр были смежными .

Слово ASCII появляется только в стандартном наброске C99 N1256 в примечаниях нижнего колонтитула и примечании 173 нижнего колонтитула):

В реализации, которая использует семибитный набор символов US ASCII, печатные символы чьи значения лежат от 0x20 (пробел) до 0x7E (тильда); контрольные символы - это те, чьи значения лежат в диапазоне от 0 (NUL) до 0x1F (US) и символа 0x7F (DEL).

подразумевая, что ASCII - не единственная возможность

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

Как все остальные говорили вам, вы можете конвертировать его напрямую ... Если вы не имели в виду что-то вроде "как я могу преобразовать расширенный символ ASCII в его значение UTF-16 или UTF-32".Это совершенно другой вопрос (по крайней мере, один хороший).И один довольно сложный, если я правильно помню, если вы используете только «чистый» C. Тогда вы можете начать здесь: https://stackoverflow.com/questions/114611/what-is-the-best-unicode-library-for-c/114643#114643

(для ASCII Extended я имею в виду одно из многих «расширений» дляНабор ASCII. 0-127 символов базового набора ASCII непосредственно преобразуются в Unicode, в то время как 128-255 - нет.)Например, ISO_8859-1 http://en.wikipedia.org/wiki/ISO_8859-1 - это 8-битные расширения для 7-битного набора ASCII или (довольно известные) кодовые страницы 437 и 850.

...