Правильный способ конвертировать char * число в int32_t - PullRequest
5 голосов
/ 17 ноября 2011

Я хочу преобразовать число из формата char * в 32-битное целое число int32_t, но strtol () возвращает long.

Я не знаю длины long на моей машине.Это может быть 32- или 64-разрядное или что-то еще в будущем.

Какой правильный и пуленепробиваемый способ преобразования строки в 32-разрядное целое число int32_t?Или преобразовать long в int32_t.

Является ли сравнение с константами _MAX и _MIN единственным и наиболее простым способом?

Ответы [ 2 ]

10 голосов
/ 17 ноября 2011

Используйте sscanf с одним из макросов спецификатора формата из <inttypes.h>, например, SCNd32 или SCNi32:

int32_t i;
sscanf(str, "%"SCNd32, &i);

Они доступны с C99.

0 голосов
/ 17 ноября 2011
char *buf;
long val;
....
if (1 == sscanf(buf, "%ld", &val) )
{
   // success!
   // now we have the data in a long, can do some boundary checking and then put it in an int32_t.
}
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...