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

0

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

У меня есть char* в котором я хочу, чтобы пользователь поставил несколько цифр (более 20), которые, в свою очередь, могут быть вызваны специально.

Это то, что я пробовал:

    char* digits = GetString();
    int prime = digits[0];

Когда я проверяю, работает ли это с printf, я считаю, что значение prime равно 0.

    printf("prime:%d\ndigits:%c\n",prime, digits[0]);

Почему это было бы и что я мог сделать, чтобы сделать эту работу?

Изменение: возможно, проще сделать массив int и использовать GetLongLong?

Теги:
type-conversion
char

2 ответа

5
Лучший ответ

Ни C, ни C++ не гарантируют, какое значение будет использовано для кодирования символа 0, но оба гарантируют, что цифры будут смежными и упорядоченными, поэтому (например) digits[0]-48 могут работать или не работать, но digits[0] - '0' гарантированно работает (предполагая, что digits[0] фактически содержат цифру, конечно).

Точное требование в стандарте C++ (§2.3/3):

В базовых наборах исходного и исполняемого символов значение каждого символа после 0 в приведенном выше списке десятичных цифр должно быть больше, чем значение предыдущего.

По крайней мере, с C99, стандарт C имеет идентичную формулировку, но в п. 5.2.1/3.

  • 0
    Спасибо вам обоим за ваш ответ. По какой-то причине премьер продолжает печатать до нуля. Сейчас я отказался от решения с использованием char, но спасибо за усилия!
2

Нулевой символ ('0') имеет числовое значение 48, '1' равно 49 и так далее.

Вы можете найти эту полезную идиому, чтобы получить числовое значение из значения ascii.

int prime = digits[0] - '0';

Вы также можете найти информацию о человеке ascii informative (или подобную страницу руководства, если вы используете какую-либо другую кодировку).

  • 0
    только на машинах, которые используют ascii для кодирования. не все машины делают.
  • 0
    Да, я полагаю , что если вы нашли себя на острове -ный игрушек и man ascii не показывает ничего, попробуйте man ebcdic .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню