Есть ли способ преобразовать символ в целое число в C?
Например, от '5'
до 5?
c
type-conversion
поток
источник
источник
Вычтем «0» следующим образом:
C Стандарт гарантирует каждая цифра в диапазоне
'0'..'9'
на единицу больше , чем его предыдущей цифре (в разделе5.2.1/3
о проекте C99 ). То же самое и с C ++.источник
Если по какому-то безумному совпадению вы захотите преобразовать строку символов в целое число, вы тоже можете это сделать!
val
теперь 1024. По-видимому,atoi()
все в порядке, и то, что я сказал об этом ранее, применимо только ко мне (в OS X (возможно (вставьте шутку о Лиспе))). Я слышал, что это макрос, который примерно соответствует следующему примеру, которыйstrtol()
вместо этого использует более универсальную функцию для преобразования:strtol()
работает так:Он преобразуется
*str
вlong
, рассматривая его как базовоеbase
число. Если**endptr
не null, он содержит первыйstrtol()
найденный нецифровой символ (но кого это волнует).источник
itoa_s()
.Вычтите char '0' или int 48 следующим образом:
Объяснение: Внутренне он работает со значением ASCII . В таблице ASCII десятичное значение символа 5 равно 53, а 0 равно 48 . Итак, 53 - 48 = 5
ИЛИ
Это означает, что если вы вычтете 48 из любого цифрового символа, он автоматически преобразует целое число.
источник
источник
numeralChar - '0'
уже имеет типint
, поэтому приведение не требуется. Даже если бы его не было, гипс не нужен.Преобразовать символьную цифру в соответствующее целое число. Сделайте как показано ниже:
Логика приведенных выше вычислений заключается в игре со значениями ASCII. Значение ASCII символа 8 - 56, значение ASCII символа 0 - 48. Значение ASCII целого числа 8 равно 8.
Если мы вычтем два символа, вычитание произойдет между символами ASCII.
источник
Если это всего лишь один символ 0-9 в ASCII, тогда вычитание значения нулевого символа ASCII из значения ASCII должно работать нормально.
Если вы хотите преобразовать большие числа, вам подойдет следующее:
** не забудьте проверить статус (он должен быть 1, если он работал в приведенном выше случае).
Павел.
источник
источник
Когда мне нужно сделать что-то подобное, я предварительно запекаю массив с нужными мне значениями.
Тогда преобразование несложно
Это в основном подход, используемый многими реализациями библиотеки ctype. Вы можете легко адаптировать это для работы с шестнадцатеричными цифрами.
источник
Проверь это,
всего за 0,1,2, ...., E, F.
источник
Просто используйте
atol()
функцию:источник
Если ваша цифра, скажем,
'5'
в ASCII, она представлена как двоичное число0011 0101
(53). Каждая цифра имеет четыре старших бита,0011
а четыре младших бита представляют цифру в двоично-десятичном формате. Так ты просто делаешьчтобы получить младшие 4 бита или, что то же самое, цифру. В asm он использует
and
операцию вместоsub
(как в других ответах).источник
'5'
is 53 (00110101
)Вот вспомогательные функции, которые позволяют преобразовывать цифру из char в int и наоборот:
источник
используйте функцию: atoi для преобразования массива в целое число, atof для преобразования массива в тип с плавающей запятой; или
источник
Вы должны преобразовать его в int (или float, или double, или что-нибудь еще, что вы хотите с ним сделать) и сохранить в переменной anoter.
источник