标签: binaryfiles

了解 Ada 如何序列化记录

当我在 Ada 中调用 Write 来序列化记录时,我希望能够预测生成的二进制文件中的内容。你知道我在哪里可以查到这个吗?

我有一些遗留的 Ada 软件,它通过写入记录来生成二进制文件,我需要调试一个应该编写兼容二进制文件的 C++ 程序。所以,我想了解 Ada 在序列化记录时遵循什么规则,以便我可以确保 C++ 代码将生成功能等效的记录。

serialization binaryfiles record ada

5
推荐指数
2
解决办法
1974
查看次数

什么是二进制格式的“对齐”字段?为什么需要它?

在ELF文件格式中,我们有一个Alignment字段,Segment Header Table即Program Header Table.

在 Windows PE 文件格式的情况下,他们将其带到下一个级别,节有两个对齐值,一个在磁盘文件中,另一个在内存中。PE 文件头指定了这两个值。

我对这种对齐一无所知。我们需要它做什么?如何以及在哪里使用它?同样,我不知道什么是二进制文件格式上下文中的对齐,但我们为什么需要它?

linker binaryfiles elf loader portable-executable

5
推荐指数
1
解决办法
1497
查看次数

什么是二进制文件以及何时在 R 中使用 writeBin()

我无法理解二进制格式的性质及其在 R 中的用处,所以我做了一些实验:

在 R 中:

y1 = rbind(c('a', 'b'), c('c', 'd'))
write.table(y1, 'f1', quote=F, col.names=F, row.names=F)
conn = file('f2', 'wb')
writeBin('a b\nc d\n', conn)
close(conn)
Run Code Online (Sandbox Code Playgroud)

在 bash 中:

cat f1
# a b
# c d
cat f2
# a b
# c d
Run Code Online (Sandbox Code Playgroud)

这些看起来完全一样,但如果我区分它们:

diff f1 f2
# Binary files f1 and f2 differ
Run Code Online (Sandbox Code Playgroud)

diff 并没有告诉我有什么区别。

那么回到主题,什么是二进制文件(毕竟在 PC 上一切都是二进制文件),我应该在什么情况下在 R 中使用它?

r binaryfiles

5
推荐指数
1
解决办法
906
查看次数

C - 二进制读取,fread 是反转顺序

fread(cur, 2, 1, 鳍)

我相信当我得到这个答案时我会觉得自己很愚蠢,但是发生了什么?

cur 是一个指向 code_cur 的指针,一个短的(2 个字节),fin 是一个为二进制读取而打开的流。

如果我的文件是 00101000 01000000

我最终得到的是

code_cur = 01000000 00101000
Run Code Online (Sandbox Code Playgroud)

这是为什么?我还没有举办任何比赛,因为问题确实归结为这种(至少对我而言)意外的行为。

而且,如果这是常态,我怎样才能获得预期的效果?

聚苯乙烯

我应该补充一点,为了“查看”字节,我正在打印它们的整数值。

printf("%d\n",code_cur)
Run Code Online (Sandbox Code Playgroud)

我试了几次,看起来很可靠。

c binaryfiles

5
推荐指数
1
解决办法
558
查看次数

在 Spark Scala 中读取二进制文件

我需要从二进制文件中提取数据。

我用过binaryRecords并得到了RDD[Array[Byte]]。

从这里我想将每条记录解析为 case class (Field1: Int, Filed2 : Short, Field3: Long)

我怎样才能做到这一点?

scala binaryfiles apache-spark

5
推荐指数
1
解决办法
7706
查看次数

如何将二进制文件读入C中的结构

我有一个叫做product 的结构,我试图从一个二进制文件中读取它来填充这个函数:

void reading(FILE *fp){

  Product *obuff = malloc(sizeof(Product));
  fread(obuff->code, sizeof(obuff->code), 1, fp);
  fread(obuff->name, sizeof(obuff->name), 1, fp);
  fread(obuff->quantity, sizeof(obuff->quantity), 1, fp);
  fread(obuff->price, sizeof(obuff->price), 1, fp);   

  printf("%s %s %d %.2f\n", obuff.code, obuff.name, obuff.quantity, obuff.price);
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时,我收到错误消息,说由于错误的数据类型而无法传递参数。有没有办法从二进制文件中读取结构,或者我只是在这里做错了什么?

结构:

#pragma pack(2)
struct product {
   char code[15];
   char name[50];
   short int quantity;
   double price;
};
#pragma pack()

typedef struct product Product;
Run Code Online (Sandbox Code Playgroud)

c struct binaryfiles

5
推荐指数
1
解决办法
4207
查看次数

有人有阅读 ISOBUS (ISO 11783-10) 二进制时间日志文件的经验吗?

我正在尝试打开并读取一堆二进制格式的地理参考时间日志文件。他们应该遵循农业机械的 ISO-11783 (ISOBUS) 标准,但在阅读了 100 多页标准后,我无法弄清楚如何使用十六进制编辑器或以编程方式使用 .NET c# 读取文件。我知道时间日志以文件对的形式出现:一个 xml 文件和一个二进制文件。例如,二进制文件名为 TLG00004.bin,在记事本中它看起来像这样(部分):

记事本中的二进制文件

当我在 Visual Studio 2015(社区)中将该文件作为二进制文件打开时,十六进制如下所示:

在此处输入图片说明

这对我没有帮助。我什至不知道如何开始将其作为代码中的字节流(或其他任何内容)阅读。

我知道文件应该以人类可读的形式看起来像这样:(TimeStart, PositionNorth, PositionEast, PositionStatus, # DLV, DLV 0, PDV 0, DLV 1, PDV 1, DLV 2, PDV 2,...)最多可以有 255 个 DLV-PDV 对,我认为它们是 32 位整数。一个例子显示为:(2005-05-02T16:32:00,51.00678,6.03489,1,2,0,10,1,15)

我在文档中看到的一些小提示向我表明这必须是 utf-8 和 base64 编码,带有小端和无字节顺序标记。但是我尝试在 Hexinator 的免费版本中打开它,并且无法(人类)使用该应用程序中的数十种编码中的任何一种来读取它,包括 utf-8、16、32...

我知道这不是正常的编程内容,但我把它扔在那里,看看我是否足够幸运,之前有人做过这件事并看到了这一点。任何提示或资源指向都会让我感激不尽,如果有人可以分享任何读取此类文件的代码,我将非常感激。

c# encoding binaryfiles packing geospatial

5
推荐指数
1
解决办法
1383
查看次数

Falcon 和 falcon-multipart + POST 请求上传文件的实现

我正在尝试使用 Falcon 框架(python)实现上传文件的 POST 请求。

我已经使用 falcon-multipart 来实现 multipart/form-data,这允许我在 cgi.FieldStorage() 中检索我的文件,其中文件是二进制格式,但是现在,我需要将此文件写入一个目录中原始扩展名。

这是我正在使用的代码。

应用程序.py:

import falcon

from .files import Resource

from falcon_multipart.middleware import MultipartMiddleware

api = application = falcon.API(middleware=[MultipartMiddleware()])

files = Resource()
api.add_route('/files', files)
Run Code Online (Sandbox Code Playgroud)

文件.py:

import io
import os
import shutil

import falcon
import json


class Resource(object):

   _storage_path = './uploaded_files'

   def on_post(self, req, resp):
        """
        POST METHOD
        """
        # Retrieve file extension
        ext = req.get_param('extension')

        # Retrieve input_file
        input_file = req.get_param('file')

        # Read file as binary
        raw = input_file.file.read()

        # Retrieve …
Run Code Online (Sandbox Code Playgroud)

post binaryfiles python-3.x falconframework

5
推荐指数
1
解决办法
5431
查看次数

Python struct.unpack(ing) 当有多个字节顺序时?

我有一个函数可以读取二进制文件,然后使用 struct.unpack() 解压缩文件的内容。我的功能工作得很好。如果/当我使用长“格式”字符串解压缩整个文件时,速度会更快。问题是有时字节对齐会发生变化,所以我的格式字符串(无效)看起来像 '<10sHHb>llh' (这只是一个例子(它们通常更长))。有没有处理这种情况的超灵巧/pythonic 方法?

python performance binaryfiles python-3.x iterable-unpacking

5
推荐指数
1
解决办法
1191
查看次数

SEGMENT_START("text-segment", 0x400000) 代表什么?

我正在学习可执行二进制文件的布局。我的最终目标是分析可以重构(在其源代码中)以减少编译输出大小的特定可执行文件。

我一直在使用https://www.embeddedrelated.com/showarticle/900.php和https://www.geeksforgeeks.org/memory-layout-of-c-program/作为这个初步学习的参考。

据我所知,链接器脚本指定了放置已编译二进制文件部分的地址。例如

> ld --verbose | grep text
  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS;
      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
Run Code Online (Sandbox Code Playgroud)

我认为这意味着text编译二进制文件的段从内存地址开始0x400000- 真的吗?

这个值0x400000代表什么?我可能没有正确理解某些东西,但肯定0x400000不代表物理内存位置,是吗?例如,如果我跑我的编译的两个实例a.out可并行执行,他们不可能都同时占据的空间0x400000,对不对?

linker binaryfiles ld memory-layout binutils

5
推荐指数
1
解决办法
936
查看次数