2009-09-30 51 views

Trả lời

15

std::strtoul() là phiên bản. Và sau đó một lần nữa có những cái cũ như atoi().

+2

atoi không hoạt động, phải không? Trong CRT Windows, nó sẽ trả về một lỗi (ERANGE) trong trường hợp tràn. – Cheeso

+0

Cheeso, vâng, cho những gì tôi có thể nói bởi "i", đó là int ;-) –

11

Boost cung cấp lexical_cast.

#include <boost/lexical_cast.hpp> 
[...] 
unsigned int x = boost::lexical_cast<unsigned int>(strVal); 

Ngoài ra, bạn có thể sử dụng một stringstream (mà về cơ bản là những gì lexical_cast nào dưới bìa):

#include <sstream> 
[...] 
std::stringstream s(strVal); 
unsigned int x; 
s >> x; 
+1

Và nếu bạn muốn giải thích không thập phân, hãy xem thêm: http://stackoverflow.com/questions/1070497/c-convert- hex-string-to-signed-integer – Martin

+0

Tôi là người duy nhất yêu thích chèn luồng, nhưng ghét trích xuất luồng? Tôi muốn sử dụng các chức năng (chẳng hạn như tăng cường này, mặc dù phải trung thực tôi có lẽ vẫn sẽ sử dụng atoi mà không suy nghĩ) mỗi lần. – Steve314

+0

Vâng, trích xuất luồng khá xấu, đặc biệt vì bạn không thể khởi tạo các hằng số với nó. Nó cũng khá mạnh mẽ hơn một chút, vì bạn có thể sử dụng các thao tác để thay đổi cơ sở của bạn, vv – Martin

-3

Làm thế nào về int atoi (const char * str)?

string s("123"); 
unsigned u = (unsigned)atoi(s.c_str()); 
+5

Đây không phải là một gợi ý tốt cả. Anh ấy được yêu cầu cụ thể về "unsigned int" và đề cập đến những thứ như "_ultoa". Các poster biết về atoi(), atol(), vv Các hàm này đều được ký và nhận biết ký hiệu, có thể xử lý tràn, vv Câu trả lời đúng là sử dụng các hàm như strtoul. – Armentage

1

sscanf sẽ làm những gì bạn muốn.

char* myString = "123"; // Declare a string (c-style) 
unsigned int myNumber; // a number, where the answer will go. 

sscanf(myString, "%u", &myNumber); // Parse the String into the Number 

printf("The number I got was %u\n", myNumber); // Show the number, hopefully 123 
+0

Tôi ghét gia đình scanf ngay cả trong C. Nó không bao giờ làm những gì tôi muốn nó làm, và hầu hết thời gian nó gây ra một lỗi. OK nếu bạn biết rằng chuỗi khớp với yêu cầu của bạn - nếu bạn đã kiểm tra nó hoặc trích xuất nó với mã khác - nhưng trong trường hợp đó, tại sao không chỉ sử dụng atoi hay gì khác? Bất cứ ai sử dụng chức năng scanf-family - tốt, có một số tội mà không có hình phạt nào có thể quá khắc nghiệt ;-) – Steve314

+0

Đó phải là "Bất kỳ ai sử dụng chức năng quét gia đình trong C++ - ..." – Steve314

0

Nó hoạt động nếu bạn đi qua _atoi64

unsigned dài l = _atoi64 (str);

Các vấn đề liên quan