标签: binaryfiles

用于编译/反编译二进制数据文件的通用实用程序或库?

我有各种二进制文件格式,我需要转储到某种文本格式,编辑然后重新编译(可能是二进制格式略有不同的版本).当然,我可以在C/C++中编写一堆实用程序代码来执行此类操作,并且可能利用库来处理文本方面(XML或JSON或其他),但这是一个不断出现的任务模式在我的工作中,在我看来,可能应该已经存在某种用于此类工作的通用工具.

显然需要某种方式来描述二进制文件格式 - 模式或类似 - 这需要支持所有明显的数据类型(字符串,各种大小的整数,bool等,浮点数也会很好),以及计数字段,长度字段,填充/对齐等等,以处理您在数据文件中找到的所有典型内容.拥有字节序支持也很有用,因为二进制文件可能具有与我们运行的平台不同的字节序.

如果这样的事情不存在我会感到非常惊讶,但到目前为止我还没有通过谷歌运气(你怎么甚至简洁地描述这样的实用工具或图书馆?).我记得最接近的是Apple的资源编译器/反编译器实用程序在"经典"Mac OS时代.这些使用了类C语法,头文件中的资源模板定义用于描述各种二进制资源的格式,您可以在这种类似C的源语法和二进制资源之间进行编译/反编译.

compiler-construction binaryfiles utility binary-data decompiler

3
推荐指数
1
解决办法
1288
查看次数

在C中读取二进制文件

我在C中读取二进制文件有以下问题.

我已经读过二进制文件的前8个字节.现在我需要从第9个字节开始读取.以下是代码:

fseek(inputFile, 2*sizeof(int), SEEK_SET);
Run Code Online (Sandbox Code Playgroud)

但是,当我打印存储检索值的数组的内容时,它仍然显示前8个字节,这不是我需要的.

有人可以帮我解决这个问题吗?

c file-io binaryfiles

3
推荐指数
2
解决办法
7706
查看次数

Python:读取二进制文件中的数组

我目前正在尝试使用以下技术读取python的fortran文件

with open(myfile, "rb") as f:
    for i in range (0, n):
        s = struct.unpack('=f', f.read(4))
        mylist.append(s[0])
Run Code Online (Sandbox Code Playgroud)

但是对于大型阵列来说它非常慢.有没有办法一次读取整个循环的内容并将其放到mylist中以避免逐个转换/追加每个项目?

非常感谢你.

python arrays binaryfiles

3
推荐指数
1
解决办法
7478
查看次数

从二进制数据中识别没有扩展名的文件类型

我有一些没有扩展名的文件.我想将扩展名与他们联系起来.为此,我编写了一个python程序来读取文件中的数据.我怀疑的是,如果不使用第三方工具,如何在没有扩展名的情况下识别其类型.

我只需要识别pdf,doc和文本文件.其他类型的文件是不可能的.

我的服务器是中心

python binaryfiles file binary-data

3
推荐指数
2
解决办法
5026
查看次数

简单阅读fortran二进制数据在python中并不那么简单

我有FORTRAN代码的二进制输出文件.想在python中阅读它.(使用FORTRAN读取并输出文本以读取python不是一个选项.长篇故事.)我可以以简单的方式阅读第一条记录:

>>> binfile=open('myfile','rb')
>>> pad1=struct.unpack('i',binfile.read(4))[0]
>>> ver=struct.unpack('d',binfile.read(8))[0]
>>> pad2=struct.unpack('i',binfile.read(4))[0]
>>> pad1,ver,pad2
(8,3.13,8)
Run Code Online (Sandbox Code Playgroud)

正好.但这是一个大文件,我需要更有效地做到这一点.所以我尝试:

>>> (pad1,ver,pad2)=struct.unpack('idi',binfile.read(16))
Run Code Online (Sandbox Code Playgroud)

这不会运行.给我一个错误并告诉我解压缩需要一个长度为20的参数.这对我来说没有任何意义,因为我上次检查时,4 + 8 + 4 = 16.当我输入并用16替换16时,它会运行,但这三个数字都填充了数字垃圾.有谁看到我做错了什么?谢谢!

python fortran binaryfiles unpack

3
推荐指数
2
解决办法
1741
查看次数

为什么以及如何从二进制文件中读取和读取?

我正在编写一个游戏项目作为业余爱好,我目前正处于需要将一些资源数据(例如.BMP)存储到我自己的文件格式中的部分,因此我的游戏可以解析所有这些并加载到屏幕.

为了读取BMP,我读取了标题,然后是每个像素的RGB数据,我有一个存储这些值的数组[width] [height].

我被告知我应该用二进制保存这些类型的数据,但不是原因.我读过关于二进制及其内容(数据的0-1表示),但为什么我应该用它来保存.BMP数据呢?如果我稍后会在游戏中阅读它,它是否只会增加更复杂性甚至可能减慢加载过程?

最后,如果以二进制保存更好(我猜它是,从我在其他游戏资源文件中研究的每个人看起来如何这样做)我如何在C++中读写二进制文件?我已经看到很多问题,但是对于许多不同类型的变量有许多不同的方法,所以我问的是哪种方法最好/更多C++是这样做的?

c++ binary binaryfiles

3
推荐指数
1
解决办法
1839
查看次数

在Julia中写一个最接近Perl Binmode的二进制文件

我正在尝试从现有的Perl代码反向设计一个Julia脚本,到目前为止一直很好,但我已经到了一个点,我现在必须在Julia中写一堆二进制文件,这是我不熟悉的.我想知道是否有人有任何经验,而且,语法是什么.我已经在互联网上搜索过,但实例一直很简陋(简而言之,我并不是说肌肉发达,而是为军事冲突做好准备,而不是荒芜).如果有人在这个话题上有一些像智慧这样的圣人让我知道.如果我从包含数值的dict写入文件,我会使用类似的东西:

for i in sick

f = open("/Users/MacBookPro15/$i/Headaches.dat", "w")
    for x in RICT["$i"]["Headaches"]
        write(f, "$x\n")
    end
close(f)

end
Run Code Online (Sandbox Code Playgroud)

我怎么能改变它来写二进制文件?非常感谢.

追逐CB

binaryfiles binmode julia

3
推荐指数
1
解决办法
700
查看次数

Perl:解码二进制文件中的时间戳

我有一个我正在解码的固定宽度二进制文件.其中一个字段是时间戳.它长5个字节,格式SS SS SS SS MS.前四个字节表示数据2000/01/01 00:00:00的秒数,该MS字节通过表示秒内10ms间隔倍数(值范围为0到99)提供更高的准确度.

该字段的编码类型是二进制.例如:答案时间是2008-4-28 14:42:51.15,字段填充0F A8 9E EB 0F.

如何在Perl中解析二进制数据并将其转换为时间戳格式?

perl datetime decode binaryfiles

3
推荐指数
1
解决办法
586
查看次数

当写入二进制文件时,`std :: ofstream :: write`有时会写入比它应该多的字节

我正在尝试将3D几何体写入二进制STL文件.以下是主程序的工作原理:

ParseSTL stl();
//generate the 3D model
std::string outfname = "test.stl";
std::ofstream outf(outfname, std::ios_base::out & std::ios_base::binary);
stl.writeBinarySTL(outf);
Run Code Online (Sandbox Code Playgroud)

而STL的作者是:

void writeBinarySTL(std::ofstream &outf)
{
    char attr[2] = { 0 };
    char header[80] = { 0 };
    int count = 0;
    outf.write(header, 80);
    //count += 80;
    //std::cout << "after header: file position: " << outf.tellp() << "  bytes written: " << count << "\n";
    //if ((int)outf.tellp() != count)
    //    std::cout << "something is wrong!\n";
    outf.write(reinterpret_cast<char *>(&facecount), sizeof(int));
    //count += sizeof(int);
    //std::cout << "after …
Run Code Online (Sandbox Code Playgroud)

c++ file-io binaryfiles

3
推荐指数
1
解决办法
1159
查看次数

将C++结果保存为二进制文件供以后使用

我正在编写一个C++程序来解决PDE并将解决方案保存在2D数组中.然后它会对此PDE的结果执行某些操作.然而,准确地解决PDE需要大量的计算.因此,解决部分只需要执行一次,但结果应该保存,以便我以后可以回复它们.

因此,我写了两个不同的代码:

  1. 求解pde并将结果保存在矩阵A中.矩阵A保存在二进制文件中.

  2. 读取二进制文件中的值并对结果进行计算.

但是,当我在第二个代码中读取二进制文件时,它只是一个空数组,并且不包含我在其他代码中保存的值.

如果我在代码1中读取它,它会按照需要运行.

我究竟做错了什么?甚至可以在其他应用程序中读取二进制文件的值吗?我应该完全解决这个问题吗?

如果我以某种方式链接它们,我将这两个代码保存在一个不同的项目中?或者两个代码是否应该在同一个项目中?

我花了几天时间在网上搜索解决方案,但我只能找到关于如何在同一代码中打开和保存二进制文件的问题和答案(例如这个和这个).这是否意味着我想要做的事情是不可能的,或者我找不到正确的来源?

我是C++的初学者,对任何帮助或方向都非常满意.

提前谢谢了!

这是代码1:

#include <iostream>
using namespace std;
#include <math.h>
#include <getopt.h>
#include <fstream>
#include <string>

// Returns a pointer-to-pointer to a newly created array
// of size [row : col].
double **Create2D(int row, int col)
{
    double **p = new double* [row];
    for (int j = 0; j < row; j ++)
        p[j] = new double[col];
    return p;
}

// Deletes an array pointed by 'p' …
Run Code Online (Sandbox Code Playgroud)

c++ binaryfiles

3
推荐指数
1
解决办法
70
查看次数