【发布时间】: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。
-
二进制文件包含 bytes 或 octets。值在 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