2011-11-17 31 views
5

Tôi muốn chuyển đổi số từ định dạng char * sang số nguyên int32_t 32 bit, nhưng strtol() trả về dài.Cách để chuyển đổi số char * thành int32_t

Tôi không biết thời lượng dài trên máy của mình. Nó có thể là 32 hoặc 64 bit hoặc cái gì đó khác trong tương lai.

Cách chính xác và chống đạn để chuyển đổi chuỗi thành số nguyên 32 bit int32_t là gì? Hoặc để chuyển đổi dài thành int32_t.

So sánh với hằng số _MAX và _MIN là cách duy nhất và đơn giản nhất?

+0

Có gì sai với 'sprintf ("% i ", ...)'? Nó không tự động xử lý các hệ thống 32/64-bit đúng cách? – Polynomial

+0

Đa thức, vấn đề là% i không tương ứng với int32_t. Dù sao, câu trả lời đúng là dưới đây. –

Trả lời

10

Sử dụng sscanf với một trong các macro định dạng định dạng từ <inttypes.h>, ví dụ: SCNd32 hoặc SCNi32:

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

Đây là có sẵn từ C99.

+1

Cảm ơn bạn! Tôi không biết về điều đó. Bạn có thể tìm danh sách trong http://www.dinkumware.com/manuals/?manual=compleat&page=inttypes.html#SCNd8. – glglgl

+0

+1 Tôi sẽ xóa bài đăng của mình ngay bây giờ :) – INS

+0

Cảm ơn bạn rất nhiều! –

0
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. 
} 
... 
Các vấn đề liên quan