Cách chuyển đổi đối tượng CString
thành số nguyên trong MFC.Chuyển đổi MFC CString thành số nguyên
Trả lời
Phương pháp đơn giản nhất là sử dụng atoi()
chức năng tìm thấy trong stdlib.h
:
CString s = "123";
int x = atoi(s);
Tuy nhiên, điều này không đối phó tốt với các trường hợp chuỗi không chứa một số nguyên hợp lệ, trong trường hợp này bạn nên điều tra các strtol()
chức năng:
CString s = "12zzz"; // bad integer
char * p;
int x = strtol (s, & p, 10);
if (* p != 0) {
// s does not contain an integer
}
CString s;
int i;
i = _wtoi(s); // if you use wide charater formats
i = _atoi(s); // otherwise
Bạn cần làm một cái gì đó với các giá trị trả về của những hàm này cho mã này có ích. –
Có, tất nhiên bạn đúng. – PaV
bạn cũng có thể sử dụng sscanf cũ tốt.
CString s;
int i;
int j = _stscanf(s, _T("%d"), &i);
if (j != 1)
{
// tranfer didn't work
}
Nếu bạn đang sử dụng TCHAR.H
thường (ngầm, hoặc rõ ràng), hãy chắc chắn bạn sử dụng _ttoi()
chức năng, do đó nó biên dịch cho cả bộ sưu Unicode và ANSI.
Thông tin chi tiết: https://msdn.microsoft.com/en-us/library/yd5xkb5c.aspx
Bạn có thể sử dụng chức năng C atoi (trong mệnh đề try/catch vì việc chuyển đổi không phải lúc nào cũng có thể) Nhưng không có gì trong các lớp MFC để làm điều đó tốt hơn.
Chào mừng bạn đến với stackoverflow. Bạn có thể đúng, nhưng có vẻ như [đã được đề cập đã trở lại trong năm 2009] (http://stackoverflow.com/a/992775/104223). (Khi bạn có đủ danh tiếng, bạn có thể thêm nhận xét vào câu trả lời hiện có) – Leigh
atoi không tăng ngoại lệ –
Sự cố với câu trả lời được chấp nhận là nó không thể báo hiệu lỗi. Có strtol
(STRING TO Long) có thể. Đó là một phần của một gia đình lớn hơn: wcstol
(Chuỗi ký tự rộng ĐẾN dài, ví dụ: Unicode), strtoull
(ĐỂ ký tên lâu dài, 64 bit +), wcstoull
, strtof
(TO Float) và wcstof
.
Chức năng _ttoi
có thể chuyển đổi CString
thành số nguyên, cả char rộng và ansi char đều có thể hoạt động. Dưới đây là chi tiết:
CString str = _T("123");
int i = _ttoi(str);
Xác định trong MSDN: https://msdn.microsoft.com/en-us/library/yd5xkb5c.aspx
int atoi(
const char *str
);
int _wtoi(
const wchar_t *str
);
int _atoi_l(
const char *str,
_locale_t locale
);
int _wtoi_l(
const wchar_t *str,
_locale_t locale
);
CString là chuỗi wchar_t. Vì vậy, nếu bạn muốn chuyển đổi Cstring thành int, bạn có thể sử dụng:
CString s;
int test = _wtoi(s)
'CString' phụ thuộc vào ký hiệu tiền xử lý' _UNICODE' và '_MBCS'. Nó có thể lưu trữ một chuỗi Unicode mã hóa UTF-16, một chuỗi ký tự DBCS hoặc một chuỗi ASCII. Đề nghị rằng nó sẽ luôn luôn là một chuỗi Unicode chỉ là sai, xin lỗi. – IInspectable
Giải pháp kinh điển là sử dụng Thư viện chuẩn C++ để chuyển đổi. Tùy thuộc vào loại trả về mong muốn, các chức năng chuyển đổi sau đây có sẵn: std::stoi, std::stol, or std::stoll (hoặc các đối tác chưa ký của chúng std::stoul, std::stoull).
Việc thực hiện là khá thẳng về phía trước:
int ToInt(const CString& str) {
return std::stoi({ str.GetString(), static_cast<size_t>(str.GetLength()) });
}
long ToLong(const CString& str) {
return std::stol({ str.GetString(), static_cast<size_t>(str.GetLength()) });
}
long long ToLongLong(const CString& str) {
return std::stoll({ str.GetString(), static_cast<size_t>(str.GetLength()) });
}
unsigned long ToULong(const CString& str) {
return std::stoul({ str.GetString(), static_cast<size_t>(str.GetLength()) });
}
unsigned long long ToULongLong(const CString& str) {
return std::stoull({ str.GetString(), static_cast<size_t>(str.GetLength()) });
}
Tất cả những hiện thực báo cáo lỗi thông qua ngoại lệ (std::invalid_argument nếu không chuyển đổi có thể được thực hiện, std::out_of_range nếu giá trị chuyển đổi sẽ rơi ra khỏi phạm vi của các loại quả). Việc xây dựng tạm thời std::[w]string
cũng có thể ném.
Việc triển khai có thể được sử dụng cho cả hai dự án Unicode cũng như MBCS.
CString s="143";
int x=atoi(s);
hoặc
CString s=_T("143");
int x=_toti(s);
atoi
sẽ làm việc, nếu bạn muốn chuyển đổi CString
để int
.
- 1. Chuyển đổi CString thành mảng ký tự?
- 2. Chuyển đổi CString thành const char *
- 3. C++ LibCurl - Chuyển đổi CURLcode thành một CString
- 4. UTF-8, CString và CFile? (C++, MFC)
- 5. Tách chức năng cho MFC Cstring Class
- 6. CString để chuyển đổi LPCTSTR
- 7. Java Chuyển đổi số nguyên thành số nguyên hex
- 8. Chuyển đổi số được viết thành từ thành số nguyên?
- 9. Chuyển đổi số nguyên thành chuỗi
- 10. Python: Chuyển đổi chuỗi thành số nguyên
- 11. Chuyển đổi size_t thành số nguyên (C++)
- 12. Chuyển đổi std :: string thành số nguyên
- 13. Chuyển đổi 2 byte thành số nguyên
- 14. Python chuyển đổi Tuple thành Số nguyên
- 15. Haskell Chuyển đổi số nguyên thành Int?
- 16. Java chuyển đổi float thành số nguyên
- 17. Ruby - Chuyển đổi số nguyên thành chuỗi
- 18. Rails Di chuyển để chuyển đổi chuỗi thành số nguyên?
- 19. Chuyển đổi số thành danh sách số nguyên
- 20. Chuyển đổi chuỗi có chứa một số thành số nguyên
- 21. Chuyển chuỗi thành số nguyên
- 22. Chuyển đổi bộ số nguyên thành phạm vi
- 23. Chuyển đổi thành một dòng số nguyên trong gấu trúc
- 24. Chuyển đổi chuỗi bằng dấu phẩy thành số nguyên
- 25. BeanUtils.copyProperties chuyển đổi số nguyên null thành 0
- 26. Ada95: Chuyển đổi số nguyên thành ký tự
- 27. Vấn đề chuyển đổi Đặt số nguyên thành mảng int []
- 28. Chuyển đổi số nguyên thành đôi trong MIPS
- 29. Chuyển đổi số nguyên thành một bit đại diện
- 30. Chuyển đổi giá trị RGB thành Số nguyên
vấp ở đây beacause trình biên dịch nói: "atoi: không thể chuyển đổi CString thành const char *"; sau đó tôi phát hiện ra câu trả lời của bạn không hoạt động nếu nó là một dự án unicode, _ttoi tốt hơn như được chỉ ra bởi Unagi – Zac
lỗi C2664: 'atoi': không thể chuyển đổi tham số 1 từ 'CString' thành 'const char *' – maamaa