Печать неподписанных коротких значений
unsigned short a;
char temp[] = "70000";
a = atoi(temp);
printf("a: %d\n", a);
Дает мне вывод a: 4464
, когда он должен быть a: 70000
Есть ли лучший способ конвертировать из ASCII в десятичный? Диапазон короткого замыкания без знака равен 0 - 65535
Ответы
Ответ 1
Вы сами отвечаете на вопрос. Диапазон a unsigned short
равен 0-65535, поэтому 70000 не вписывается в него (2 байта), вместо этого используется тип данных с 4 байтами (unsigned int
должен работать, вы можете проверить размер с помощью sizeof
).
Ответ 2
Как schnaader сказал, вы можете столкнуться с проблемой переполнения.
Но отвечая на ваш вопрос printf
о выводе неподписанных значений, вы хотите модификатор u
(для "unsigned" ). В этом случае, как указывает Йенс ниже, вы хотите %hu
:
printf("a: %hu\n", a);
... хотя, скорее всего, будет работать только %u
(unsigned int
, а не unsigned short
), потому что short
будет повышаться до int
, когда он будет нажат на стек для printf
.
Но опять же, только если значение 70000 будет соответствовать unsigned short
на вашей платформе.