C++ 如何读取二进制文件并打印3';屏幕上有什么?

C++ 如何读取二进制文件并打印3';屏幕上有什么?,c++,binary,C++,Binary,我想读取一个整数类型的二进制文件,并打印文件中出现的3的数字。我不知怎么写了一个程序来打开和读取二进制文件 以下是我面临的两个问题: 如果我尝试在终端上打印文件,执行将继续 永远,循环永远不会结束 我不知道如何从中过滤出3 这是我的密码: #include <iostream> #include <fstream> using namespace std; int main () { streampos size; char * memblock; ifstream

我想读取一个整数类型的二进制文件,并打印文件中出现的3的数字。我不知怎么写了一个程序来打开和读取二进制文件

以下是我面临的两个问题:

  • 如果我尝试在终端上打印文件,执行将继续 永远,循环永远不会结束
  • 我不知道如何从中过滤出3
  • 这是我的密码:

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main () {
    streampos size;
    char * memblock;
    
    ifstream file ("threesData.bin", ios::in|ios::binary|ios::ate);
    if (file.is_open())
    {
        size = file.tellg();
        memblock = new char [size];
        file.seekg (0, ios::beg);
        file.read (memblock, size);
        file.close();
    
        cout << "the entire file content is in memory";
    
        for (int i = 0; i < size; i += sizeof(int))
        {
            cout << *(int*)&memblock[i] << endl;
        }
    
    
        delete[] memblock;
    }
    else 
        cout << "Unable to open file";
    
    return 0;
    }
    
    #包括
    #包括
    使用名称空间std;
    int main(){
    streampos大小;
    char*memblock;
    ifstream文件(“threesData.bin”,ios::in | ios::binary | ios::ate);
    if(file.is_open())
    {
    size=file.tellg();
    memblock=新字符[大小];
    file.seekg(0,ios::beg);
    file.read(memblock,size);
    file.close();
    
    cout以下是实现您的需求的方法:

    int main()
    {
      unsigned int quantity = 0U;
      ifstream file ("threesData.bin", ios::in|ios::binary|ios::ate);
      uint8_t byte;
      while (file >> byte)
      {
        if (byte == 3U)
        {
          ++ quantity;
        }
      }
      cout << "The quantity of 3s is: " << quantity << endl;
      return 0;
    }
    
    intmain()
    {
    无符号整数数量=0U;
    ifstream文件(“threesData.bin”,ios::in | ios::binary | ios::ate);
    uint8_t字节;
    while(文件>>字节)
    {
    如果(字节==3U)
    {
    ++数量;
    }
    }
    
    你的“二进制”文件的格式是什么?如果你不知道,你就不能写这个程序。我怀疑你可能误解了你的家庭作业练习。你明白cast
    (int*)的意思吗
    正在做什么?size==0不是这样吗?甚至-1解决此类问题的正确工具是您的调试器。在询问堆栈溢出问题之前,您应该逐行检查代码。有关更多帮助,请阅读。至少,您应该[编辑]您的问题包括一个重现您的问题的示例,以及您在调试器中所做的观察。我怀疑执行最终会结束,只是看着一个int流经过很无聊