Подтвердить что ты не робот

Печать неподписанных коротких значений

  unsigned short a;
  char temp[] = "70000";
  a = atoi(temp);
  printf("a: %d\n", a);

Дает мне вывод a: 4464, когда он должен быть a: 70000 Есть ли лучший способ конвертировать из ASCII в десятичный? Диапазон короткого замыкания без знака равен 0 - 65535

4b9b3361

Ответ 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 на вашей платформе.