我們有一個文件,其中包含64位整數作爲字符串。我們如何scanf()或以其他方式將此數字字符串解析爲C++中的無符號64位整數類型?從文件中讀取64位整數字符串
我們知道諸如%lld等之類的東西,但是很多解析方法似乎都會破壞不同編譯器和stdlib下的編譯。代碼應該在gcc和Microsoft C++編譯器下編譯(當然完全符合標準會更好)
我們有一個文件,其中包含64位整數作爲字符串。我們如何scanf()或以其他方式將此數字字符串解析爲C++中的無符號64位整數類型?從文件中讀取64位整數字符串
我們知道諸如%lld等之類的東西,但是很多解析方法似乎都會破壞不同編譯器和stdlib下的編譯。代碼應該在gcc和Microsoft C++編譯器下編譯(當然完全符合標準會更好)
GCC有很長很長,也將用於的C++ 0x編譯器。 MSVC++不(但),但它有__int64您可以使用。
#if (__cplusplus > 199711L) || defined(__GNUG__)
typedef unsigned long long uint_64_t;
#elif defined(_MSC_VER) || defined(__BORLANDC__)
typedef unsigned __int64 uint_64_t;
#else
#error "Please define uint_64_t"
#endif
uint_64_t foo;
std::fstream fstm("file.txt");
fstm >> foo;
請勿使用scanf()
,分開標記輸入,然後使用strtoull()
或類似標記。
Alnitak建議strtoull()
,但它似乎不是available in Win32環境。鏈接到論壇主題推薦_strtoui64()
,_wcstoui64()
和_tcstoui64()
作爲替代。也許這是「靠邊緣」的東西,不能用一個可移植的函數調用完成,而且您可能需要爲不同的平臺實現不同的代碼路徑。或者,我想,編寫自己的ASCII到64位轉換器,這不是火箭科學。
或者使用istream對象的類型安全......
using namespace std;
// construct a number -- generate test data
long long llOut = 0x1000000000000000;
stringstream sout;
// write the number
sout << llOut;
string snumber = sout.str();
// construct an istream containing a number
stringstream sin(snumber);
// read the number -- the crucial bit
long long llIn(0);
sin >> llIn;
std::fstream fstm("file.txt");
__int64 foo;
fstm >> foo;
strtoull()是否本機支持Windows? – Thorsten79 2008-10-31 09:40:01
你可以很容易地做你自己的。 – Artelius 2008-10-31 09:47:57