【问题标题】:Print unknown file format to screen将未知文件格式打印到屏幕
【发布时间】:2016-03-03 20:22:25
【问题描述】:

我从机器人那里得到了一个测试文件,我必须使用我正在开发的 C++ 程序进行编程。所以我想用这个文件来看看机器人是如何保存点的坐标的。我的程序目前可以计算坐标,现在我必须生成机器人代码。

因此我想看一下文件。但似乎该文件是以二进制模式写入的。所以我的第一个想法是:以二进制模式打开文件并将内容打印到屏幕上。所以这是我正在使用的代码:

//#include "stdafx.h"
  #include <iostream>     // std::cout
  #include <fstream>      // std::ifstream
  #include <Windows.h>

  int main () {
     std::ifstream is ("Test.PRG", std::ifstream::binary);
     if (is) {
          // get length of file:
          is.seekg (0, is.end);
          int length = is.tellg();
          is.seekg (0, is.beg);

          char * buffer = new char [length];

          std::cout << "Reading " << length << " characters... ";
          // read data as a block:
          is.read (buffer,length);

          if (is)
              std::cout << "all characters read successfully.";
          else
              std::cout << "error: only " << is.gcount() << " could be read";
          is.close();

          // ...buffer contains the entire file...

          for(int i=0; i<length; i++)
          {
            std::cout << (double) buffer[i] << std::endl;
          }

          delete[] buffer;
          }

         Sleep(10000);
         return 0;
   }

但是使用这段代码,我只是看不到文件中写入的内容。我还尝试了与(双)不同的对话。我使用了 char、int 和 float。现在我只是不知道,我还能做些什么。是否有可能的方法来读取此文件并将其转换为 ASCII?我还在此处添加了该文件的链接,因此您可以查看它。 Download link for file

【问题讨论】:

  • 使用可以查看二进制文件的文本编辑器,例如 Ultra Edit。
  • 二进制文件包含 bytesoctets。值在 0 .. 255 范围内。可打印的 ASCII 字符集要小得多。所以有很多 unprintable 值(如果您选择查看为字符)。您需要将值读取为uint8_t 并将它们打印为整数。通常是以十六进制完成。
  • 在 *nix 系统和 Cygwin(用于 Windows)中,有一个实用程序 od(八进制转储),它可以以八进制和十进制打印文件的内容。研究它。您甚至可以获得它的源代码。
  • Ultra Edit 可以查看十六进制文件。转到编辑 |十六进制函数 |十六进制编辑,或按 Ctrl-H。
  • 我通常使用 HexFiend 来处理这类事情。这是一个很好的比较图表,显示了各种十六进制编辑器及其功能和成本:en.wikipedia.org/wiki/Comparison_of_hex_editors

标签: c++ binaryfiles


【解决方案1】:

这是我使用 HexFiend 拍摄的文件开头的图片:

【讨论】:

  • 我通过 UltraEdit 得到了同样的结果。但这是保存在这个文件中的所有内容吗?这个文件里应该有更多的信息,比如坐标。
  • 我确定文件中还有坐标。我只打印了开头。但是你可能需要一个 PRG 文件的文件格式规范,然后才能从像这样的二进制文件中提取坐标。
  • 我查看了整个文件,唯一看到的是WRKCoo 和一个数字。但我知道这是机器人的移动命令。问题是我不会从提供这个机器人的公司那里得到 PRG 的规格。所以对机器人进行编程的唯一可能方法是理解这个文件
  • 我的下一个建议是获取kuka|prc 程序的样本副本并生成一些样本文件,然后使用十六进制转储工具查看它们。我假设kuka|prc 是PRC 文件的程序;我自己还没有真正尝试过。这是该程序试用版的链接:robotsinarchitecture.org/kuka-prc
猜你喜欢
  • 1970-01-01
  • 2021-07-20
  • 1970-01-01
  • 2012-12-08
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多