【问题标题】:Reading binary file into char array in c++在c ++中将二进制文件读入char数组
【发布时间】:2016-02-29 08:50:00
【问题描述】:
std::streampos size;
char * memblock;

std::ifstream input ("A.JPG", std::ios::in|std::ios::binary|std::ios::ate);

if (input.is_open())
{
    size = input.tellg();
    memblock = new char [size];
    input.seekg (0, std::ios::beg);
    input.read (memblock, size);
    input.close();

    std::cout << "[INPUT]the entire file content is in memory " << sizeof(memblock) << " \n";

}
delete[] memblock;

我想使用 ifstream 读取 A.JPG (28KB) 并将其保存到数组 memblock 中。但是为什么memblock的大小是4而不是28403而变量大小等于28403呢?

谢谢。

【问题讨论】:

  • sizeof(memblock) 更改为sizeof(*memblock)
  • @RomanZaytsev sizeof(*memblock) 在这里帮不上忙。
  • @πάντα ῥεῖ 你能详细说明一下吗?我在想,这种情况等于stackoverflow.com/a/37539/5247040
  • @RomanZaytsev,调用sizeof(*memblock) 将类似于调用sizeof(memblock[0]),即sizeof(char)
  • @RomanZaytsev sizeof() 不能用于确定在运行时分配的数组的大小,计算是在编译时完成的。您的示例适用于静态分配的数组。

标签: c++


【解决方案1】:

因为memblock 是一个指针,所以sizeof 运算符的计算结果是指针变量的大小,即4 个字节。

【讨论】:

  • 感谢您的回答,但我没有足够的声誉来为您的回答 +1 :(。但无论如何,您的回答让我明白了原因。
【解决方案2】:

谢谢大家,最后我改用矢量了。 因为似乎很难显示我想要的结果(实际字符数组的长度)

std::vector <char> memblock(0);
  if (input.is_open())
  {
    size = input.tellg();
    //memblock = new char [size];
    memblock.resize(size);
    input.seekg (0, std::ios::beg);
    input.read (&memblock[0], size);
    input.close();


    //std::cout << "[INPUT]the entire file content is in memory " << ((char *)(&memblock+1) - (char *)memblock) / (sizeof(memblock[0])) << " \n";
    std::cout << "[INPUT]the entire file content is in memory " << memblock.size() << " \n";

【讨论】:

  • 使用矢量的这个版本没有任何问题,但这不是您原始问题的答案。你说你想将 jpeg 读入一个数组,你没有要求关于不同方法的建议。您的问题是:“为什么 memblock 的大小是 4 而不是 28403”,并且您得到了正确答案。下次当有人给你答案时,请将其标记为已接受。毕竟,我们是在利用一部分业余时间来帮助您。
  • @Marko Popovic 抱歉,实际上我仍然想知道如何获得它的长度。这可能不是答案,我只想分享实现相同目标的替代方法。我认为我的问题不好,我应该问如何获得长度而不是“为什么”。但无论如何,非常感谢您的评论和回答。我会把它标记为答案,谢谢。
猜你喜欢
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 2021-08-30
  • 2016-03-30
相关资源
最近更新 更多