【问题标题】:C++ Convert LARGE_INTEGER to StringC++ 将 LARGE_INTEGER 转换为字符串
【发布时间】:2015-07-15 10:18:39
【问题描述】:

我有一个更大的整数,它是由一个运算形成的

__int64 c = (bytesTransferred.HighPart*2^31 + bytesTransferred.LowPart) * 100/(fileSize.HighPart*2^31 + bytesTransferred.LowPart);

例如,如何将其转换为字符串以在消息框中显示?我试过了:

std::string percent;
std::stringstream strstream;
strstream << c;
strstream >> percent;

但是没有用。

【问题讨论】:

标签: c++ winapi tostring


【解决方案1】:

std::string to_string( long long value );

定义在&lt;string&gt;
http://en.cppreference.com/w/cpp/string/basic_string/to_string

【讨论】:

    【解决方案2】:

    也许:

     std::stringstream strstream;
     strstream << c;
     std::string percent(strstream.str());
    

    或者试试看 _i64toa() 函数。

    【讨论】:

      【解决方案3】:

      首先你的计算似乎是错误的:我猜它最右边的部分应该是fileSize.LowPart 而不是bytesTransferred.LowPart。 计算c 的更好方法可能是

      #include <cstdint>
      int64_t c = (bytesTransferred.QuadPart * 100) / fileSize.QuadPart;
      

      然后你可以转换成字符串:

      std::stringstream ss;
      ss << c;
      std::string percent = ss.str();
      

      【讨论】:

      • bytesTransferred.QuadPart * 100 可能会溢出__int64 的有效范围。
      • @IInspectable,仅当文件大小至少为 8 388 608 TB(太字节)时才会发生这种情况。
      • 没错,感谢您的确认。一种可能的解决方案是__int64 c = (bytesTransferred.QuadPart * 100.0) / fileSize.QuadPart + 0.5;
      【解决方案4】:

      你的字符串转换没有问题,你的 LARGE_INTEGER 数学有问题。试试这个:

      __int64 c = (bytesTransferred.QuadPart * 100) / (fileSize.QuadPart)
      

      【讨论】:

      • bytesTransferred.QuadPart * 100 可能会溢出__int64 的有效范围。
      猜你喜欢
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      相关资源
      最近更新 更多