Cách an toàn nhất và tốt nhất để truy xuất một ký tự dài chưa được ký từ một chuỗi trong C++ là gì?Làm thế nào để bạn nhận được một unsigned dài ra khỏi một chuỗi?
Tôi biết một số phương pháp có thể.
Đầu tiên, chuyển đổi thời lượng dài đã ký từ atol.
char *myStr; // Initalized to some value somehow.
unsigned long n = ((unsigned)atol(myStr));
Vấn đề rõ ràng với điều này là, điều gì xảy ra khi giá trị được lưu trữ trong myStr lớn hơn ký dài có thể chứa? Atol lấy gì?
Khả năng tiếp theo là sử dụng strtoul.
char *myStr; // Initalized to some value somehow.
unsigned long n = strtoul(myStr, 0, 10);
Tuy nhiên, điều này hơi phức tạp hơn đối với nhu cầu của tôi. Tôi muốn một chức năng đơn giản, chuỗi trong, unsigned dài cơ sở 10 ra. Ngoài ra, xử lý lỗi lá nhiều để được mong muốn.
Khả năng cuối cùng tôi tìm thấy là sử dụng sscanf.
char *myStr; // Initalized to some value somehow.
unsigned long n = 0;
if(sscanf(myStr, "%lu", n) != 1) {
//do some error handling
}
Một lần nữa, xử lý lỗi lá nhiều mong muốn và phức tạp hơn một chút so với tôi muốn.
Tùy chọn hiển nhiên còn lại là viết trình bao bọc xung quanh một trong các khả năng trước đó hoặc một số thứ mà chu kỳ qua chuỗi và chuyển đổi thủ công từng chữ số cho đến khi đạt đến ULONG_MAX.
Câu hỏi của tôi là, các tùy chọn khác mà google-fu của tôi không tìm thấy được là gì? Bất cứ điều gì trong thư viện std C++ sẽ xóa sạch một chuỗi thành một unsigned long và throw exceptions về thất bại?
Lời xin lỗi của tôi nếu đây là sự lừa đảo, nhưng tôi không thể tìm thấy bất kỳ câu hỏi nào khớp chính xác với tôi.
'atol':" Nếu giá trị chính xác nằm ngoài phạm vi giá trị thể hiện, LONG_MAX hoặc LONG_MIN được trả về ". http://www.cplusplus.com/reference/clibrary/cstdlib/atol/ –
Vài câu hỏi, tôi không chắc chắn liệu chúng có trùng lặp hay không: (1) http://stackoverflow.com/questions/1243428/convert- string-to-int-với-bool-fail-in-c/1243435 (2) http://stackoverflow.com/questions/1435253/c-syntax-question-if-var-type-int/1435268 – GManNickG
Tôi không 't hiểu những gì bạn có chống lại strtoul. Đó là chức năng hoàn hảo cho việc này. Vượt qua 0 cho cơ sở và nó sẽ chuyển đổi số với bất kỳ chuỗi tiền tố cơ sở nào mà thư viện C của bạn hiểu, như "0x". –