C++计算两个off64_t数字之间的差值

Calculate the difference between two off64_t numbers C++

本文关键字:数字 之间 off64 计算 两个 C++      更新时间:2023-10-16

我想分配内存以便在我的C++程序中读取(整个)非常大的文件(15-25 Gb)。我使用off64_t类型来获取我要读取的文件的开始和结束位置,这些位置是使用函数 ftello64 从我的文件中获取的。我现在想在一个名为 size 的变量中获取两者之间的差异,然后将其分配给 char 数组。但是,尽管编译成功,但我的代码无法正常工作。我尝试size = (off64_t)(end_of_mem-start_of_mem); start_of_memend_of_mem都是off64_t数字,但是当我运行程序时,输出是

Starting position in memory (start_of_mem):152757
Ending position in memory (end_of_mem):15808475159
Size: -1371546782

我应该使用哪种变体类型来正确执行此操作?提前感谢您的帮助和建议。

您正在经历从 64 位到 32 位的 int 向下转换副作用。

看看下面的实验:

#include <cstdint>
#include <iostream>
int main(){
  int64_t int64 = 15808475159 - 152757;
  int32_t int32 = int64;
  std::cout << "int64_t: " << int64 << "n";
  std::cout << "int32_t: " << int32 << "n";
}

输出:

int64_t: 15808322402
int32_t: -1371546782

问题是15808475159 - 152757大于 32 位整数范围的结果。因此,由于溢出,它被截断(或 mod 2^32)。然后,由于它声明为有符号的 32 位,它显然属于解释的负范围。