将uintmax_t转换为int时遇到问题
我正在尝试将我的外接W 驱动器的总容量(含保留空间)以整数形式获取。下面是我的代码:
#include <iostream>
#include <filesystem>
int main() {
auto size = std::filesystem::space("\\\\.\\W:").capacity;
std::cout << "\nCAPACITY: " + std::to_string(static_cast<int>(size));
}
这会输出 CAPACITY: 625995776。根据Windows和我用Java编写的一个类似程序显示,我的 W: 驱动器的容量是1,022,828,212,224字节,而不是约6.26亿字节。我猜这是一个转换错误,但我不明白该如何修复。
解决方案
这与文件系统API无关。
一个典型的 int 是32位,能够表示的数值范围是 -2147483648 到 2147483647。
1022828212224 太大,无法放入,因此在被强制转换或赋值为 int 时会被截断。
gcc以及clang在直接赋值时也会对其发出警告——请参见 demo。
为了解决这个问题,你应该简单地使用一个能够容纳此类数值的数据类型(如 uint64_t、long int 等等)。
附带说明:
你原始的问题文本提到了 1012924416 的值(而不是 1022828212224)。这是一个不同的情况,因为 1012924416 确实可以放入一个典型的 int。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。