我從C++中的數據文件中獲得了一些信息。一個信息是一個12個字符的長號碼。我怎麼能把這個從字符串轉換爲long long(我認爲long long最適合這個)而沒有數據丟失?將一個ASCII字符串轉換爲long long
1
A
回答
5
在C++中,沒有long long
數據類型。 It's available in C99。但是,您可以使用int64_t
。包括<stdint.h>
。使用將字符串轉換爲int64_t
。
或者你可以寫一個轉換函數自己是:
int64_t convert(const std::string &s)
{
if(s.size() == 0)
std::runtime_error error("invalid argument");
int64_t v = 0;
size_t i=0;
char sign = (s[0] == '-' || s[0] == '+') ? (++i, s[0]) : '+';
for(; i < s.size(); ++i)
{
if (s[i] < '0' || s[i] > '9')
throw std::runtime_error("invalid argument");
v = v * 10 + s[i] - '0';
}
return sign == '-' ? -v : v;
}
測試代碼:
int main() {
try{
std::cout << convert("68768768") << std::endl;
std::cout << convert("+68768768") << std::endl;
std::cout << convert("-68768768") << std::endl;
std::cout << convert("68768768x") << std::endl;
}catch(const std::exception &e)
{
std::cout << e.what() << std::endl;
}
return 0;
}
輸出:
68768768
68768768
-68768768
invalid argument
0
一個64位的位整數足以表示任何12位十進制數(有足夠的空間可用)。因此,根據您的平臺,可能會有一個long
就足夠了。如果是這種情況,您可以使用strtol
或strtoul
。
如果您確實需要long long
,請查看strtoll
和strtoull
。
相關問題
- 1. 將字符串轉換爲long long值
- 2. 將字符串轉換爲long long C?
- 3. 將字符串轉換爲long long
- 4. 將字符串轉換爲long long int
- 5. 將字符串轉換爲無符號long long int C
- 6. 如何將字符串轉換爲long
- 7. Android - 將字符串轉換爲long值
- 8. 將字符串轉換爲long triggerAtMilli
- 9. 如何將字符串轉換爲long?
- 10. 將long long轉換爲C中的字符串?
- 11. 如何將字符串轉換爲long long
- 12. 將int轉換爲無符號long long
- 13. Java long不能轉換爲字符串
- 14. 類型轉換爲無符號long long?
- 15. 從int轉換爲long long
- 16. 將RDD [Long,String,Long]轉換爲sql.DataFrame
- 17. 在字符串C++中轉換Long?
- 18. Spark:將RDD [(Long,Array [Double])]轉換爲RDD [(Long,Long,Double)]
- 19. 將無符號long long轉換爲wchar_t *並連接
- 20. 類型轉換爲unsigned long long到字符指針用C
- 21. 將long double轉換爲CString
- 22. 將Lat/long轉換爲PointClass
- 23. 將int [2]轉換爲long
- 24. 將字符串從strftime轉換爲int/long
- 25. 在unix shell ksh中將日期字符串轉換爲long
- 26. 將變量值從字符串轉換爲Java中的long
- 27. 無法將類型'字符串'隱式轉換爲'long'
- 28. 將字符串轉換爲Long,沒有內置庫
- 29. 在excel宏中將字符串轉換爲long
- 30. 將unicode字符串轉換爲int或long
我要說那90%他會fi在他的平臺上只有32位,除非他用GCC編譯64位系統(或其他更特殊的編譯器) – xanatos
也就是說,你可能會提到'strtol' /'strtoul'用於普通的longs。 。 –