c++ - 读取二进制文件并解释数据

标签 c++ binary ascii binaryfiles

<分区>

我的目标是从二进制文件中读取数据,并最终将这些位存储在 32 位片中。我发现了几种在 C++ 中读取二进制文件的不同方法,但不确定哪个是最佳选择,我的主要问题是在存储数据后输出数据时,我没有访问单个位,而是显示 ASCII 字符。

int main(int argc, const char *argv[])
{

std::vector<char> memblock;
int i=0;
        ::std::ifstream in(argv[1], ::std::ios::binary);
        while (in) {
              char c;
              in.get(c);
              if (in) {
                 memblock.push_back(int(c));
                i++;
                  //::std::cout << "Read a " << int(c) << "\n";
              }
           }
std::cout << "The contents of memblock are:";
  for (std::vector<char>::iterator it = memblock.begin(); it != memblock.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';
return 0;
}

还有:

streampos size;
      char * memblock;

      ifstream file ("path", 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<10; i++){
           cout << memblock[i+2000];
       }
      }

每种方法都有优势吗?或者有更好的方法吗?另外,如何确保存储二进制文件中的实际位值或二进制数据?谢谢

最佳答案

您想读取 32 位整数,而不是 char:

uint32_t * memblock;
ifstream file ("path", ios::in|ios::binary|ios::ate);
   if (file.is_open())
   {
       size = file.tellg();
       memblock = new unit32_t [size / 4 + (size % 4 == 0 ? 0 : 1)];
       file.seekg (0, ios::beg);
       file.read (reinterpret_cast<char*>(memblock), size);
       file.close();

       cout << "the entire file content is in memory";

       for(int i =0; i<size/4; i++){
            cout << memblock[i];
       }
    }

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

相关文章:

c++ - std::vector 需要有 dll 接口(interface)供类 'X<T> 警告的客户端使用

javascript - 如果我不知道响应类型,我可以执行 XMLHttpRequest 吗?

colors - 计算机如何以不同的方式处理 ascii/文本和图像/颜色?

ruby-on-rails - Rails 3 无效的多字节字符 (US-ASCII)

c++ - 不能使用指针作为默认模板参数

c++ - Lambda 类型推导

c++ - 在 Qt 和 C++ [QMediaPlayer] 中更改 mp3 速度

C++ ifstream 将读取一些值然后停止

c++ - 在 C++ 中逐行读取单个十六进制值

python - 如何以随机颜色打印每个字符/行?