将uintmax_t转换为int时遇到问题

编程语言 2026-07-09

我正在尝试将我的外接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位,能够表示的数值范围是 -214748364821474836471022828212224 太大,无法放入,因此在被强制转换或赋值为 int 时会被截断。

gcc以及clang在直接赋值时也会对其发出警告——请参见 demo

为了解决这个问题,你应该简单地使用一个能够容纳此类数值的数据类型(如 uint64_tlong int 等等)。

附带说明:
你原始的问题文本提到了 1012924416 的值(而不是 1022828212224)。这是一个不同的情况,因为 1012924416 确实可以放入一个典型的 int

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章