gpt4 book ai didi

c++ - 读取二进制文件c++

转载 作者:可可西里 更新时间:2023-11-01 17:14:12 26 4
gpt4 key购买 nike

我正在尝试将图像读入 char 数组。这是我的尝试:

ifstream file ("htdocs/image.png", ios::in | ios::binary | ios::ate);
ifstream::pos_type fileSize;
char* fileContents;
if(file.is_open())
{
fileSize = file.tellg();
fileContents = new char[fileSize];
file.seekg(0, ios::beg);
if(!file.read(fileContents, fileSize))
{
cout << "fail to read" << endl;
}
file.close();

cout << "size: " << fileSize << endl;
cout << "sizeof: " << sizeof(fileContents) << endl;
cout << "length: " << strlen(fileContents) << endl;
cout << "random: " << fileContents[55] << endl;
cout << fileContents << endl;
}

这是输出:

size: 1944
sizeof: 8
length: 8
random: ?
?PNG

谁能给我解释一下?位置 8 是否有文件结束字符?此示例取自 cplusplus.com

运行 Mac OS X 并使用 XCode 进行编译。

最佳答案

  1. 返回文件的大小。你的尺寸image.png1944 bytes .

    cout << "size: " << fileSize << endl;

  2. 返回 sizeof(char*) ,即 8在您的环境中。 请注意,任何指针的大小在任何环境中始终相同。

    cout << "sizeof: " << sizeof(fileContents) << endl;

  3. 您正在读取的文件是一个二进制文件,因此它可能包含 0作为有效数据。当您使用 strlen , 它返回长度直到 0遇到,在您的文件中是 8 .

    cout << "length: " << strlen(fileContents) << endl;

  4. 返回56th location处的字符(记住数组索引从 0 开始)从文件开始。

    cout << "random: " << fileContents[55] << endl;

一个建议:

请记住取消分配 fileContents 的动态内存分配使用:

delete[] fileContents;

否则,您最终会造成内存泄漏

关于c++ - 读取二进制文件c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6162601/

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