C++ 从文件中读取64位整数字符串

C++ 从文件中读取64位整数字符串,c++,parsing,64-bit,integer,C++,Parsing,64 Bit,Integer,我们有一个文件,其中有一个64位整数作为字符串。我们如何扫描(或)将这个数值字符串解析成C++中的一个无符号的64位整数类型?p> 我们知道像%lld之类的事情,但是很多进行这种解析的方法似乎会破坏不同编译器和stdlib下的编译。代码应该在GCC和微软C++编译器下编译(当然完全符合标准将是一个好的选择) < P>不要使用 ScSff()/Cl>,将输入单独标记,然后使用 StutOLL()/或类似。 P> AlnAlk建议 StutOLL()/Cl>,但它似乎不是环境。链接到论坛的线程建议使

我们有一个文件,其中有一个64位整数作为字符串。我们如何扫描(或)将这个数值字符串解析成C++中的一个无符号的64位整数类型?p>
我们知道像%lld之类的事情,但是很多进行这种解析的方法似乎会破坏不同编译器和stdlib下的编译。代码应该在GCC和微软C++编译器下编译(当然完全符合标准将是一个好的选择)

< P>不要使用<代码> ScSff()/Cl>,将输入单独标记,然后使用<代码> StutOLL()/<代码>或类似。<> P> AlnAlk建议<代码> StutOLL()/Cl>,但它似乎不是环境。链接到论坛的线程建议使用
\u strtoui64()
\u wcstoui64()
\u 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;
//构造一个数字——生成测试数据
长llOut=0x10000000000000;
斯特林特河;
//写下号码
sout>llIn;

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;

Windows本机支持strtoull()吗?你可以很容易地制作自己的。公平地说,我说过“或类似的”:)就我个人而言,我会使用stdint.h提供的uint64。它是C99标准,不是C++,但它在GCC中,你可以很容易地在网上找到VC++版本并在项目中投入使用。将来J.Random平台也是如此,如果幸运的话,它将出现在C++0x中。虽然(u)int64_t实际上是可选的,但可以放心地假设它将用于PC。否则,可以使用uint_least64_t或uint_fast64_t。
#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;