Печать беззнаковых коротких значений - PullRequest
10 голосов
/ 27 февраля 2011
  unsigned short a;
  char temp[] = "70000";
  a = atoi(temp);
  printf("a: %d\n", a);

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

Ответы [ 2 ]

8 голосов
/ 27 февраля 2011

Как сказал schnaader , вы можете столкнуться с проблемой переполнения.

Но, отвечая на ваш вопрос printf о выводе беззнаковых значений, вам нужен модификатор u (для "без знака"). В этом случае, как указывает Дженс ниже, вы хотите %hu:

printf("a: %hu\n", a);

... хотя просто %u (unsigned int, а не unsigned short), вероятно, также будет работать, потому что short будет повышен до int, когда он будет помещен в стек для printf.

Но опять же, это только в том случае, если значение 70000 будет соответствовать unsigned short на вашей платформе.

8 голосов
/ 27 февраля 2011

Вы сами отвечаете на вопрос.Диапазон unsigned short составляет 0-65535, поэтому 70000 не вписывается в него (2 байта), вместо этого используйте тип данных с 4 байтами (unsigned int должно работать, размер можно проверить с помощью sizeof).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...