gpt4 book ai didi

c++ - 数组和文件大小的数据类型

转载 作者:搜寻专家 更新时间:2023-10-31 01:30:20 26 4
gpt4 key购买 nike

我应该使用什么数据类型来定义文件大小以将文件数据存储在动态数组中?考虑以下代码段:

#include <cstdint>
#include <string>
#include <fstream>

typedef uint64_t file_size_t;
typedef uint64_t file_pos_t;

int32_t ReadBytes(const std::wstring& file, file_pos_t pos, file_size_t numBytes, char*& readDataBuffer,
file_size_t& bufferLen)
{
using namespace std;

bufferLen = 0;
readDataBuffer = nullptr;
ifstream is(file, ifstream::binary);
if (!is)
return -1;

is.seekg(pos);
if (!is)
{
is.close();
return -2;
}

// Compiler warning in the following code line:
readDataBuffer = new char[numBytes]();
is.read(readDataBuffer, numBytes);
bufferLen = is.gcount();
is.close();

return 0;
}

对于我已经定义的类型,我的编译器 (MS Visual C++ 2017) 给出警告:'initializing': conversion from 'file_size_t' to 'unsigned int', possible loss of data为 32 位架构构建时。我使用 uint64_t 因为它与接收或返回 streamsize(这是定义为 using streamoff = long long; in iosfwd.h) 和等效类型。

我如何定义 file_size_t 来移除这个警告?使用 streamsize 也会给出我在评论中指出的警告。

最佳答案

size_tsizeof() 返回的传统类型,它指定某个对象的大小,可以是数组,也可以是单个对象。

您的数据来自文件这一事实无关紧要。它仍然以数组形式结束,size_t 是给定数组的所谓大小的类型。

您的操作系统完全有可能允许创建大于 size_t 可以表示的值范围的文件。据推测,如果您希望将这样的文件读入阵列,由于操作系统的限制,您将无法读取其全部内容。您显然有一些方法来处理这种情况,但在所有情况下,size_t 始终是 size_t

关于c++ - 数组和文件大小的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48137023/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com