标签: binaryfiles

在 R 中写入二进制数据

我正在尝试编写 HTTP POST 请求,但我需要首先将数据转换为二进制格式。这可能是一个简单的问题,但我发现 R 连接确实令人困惑,而且我一直很难找到一个好的资源来以我理解的方式解释它们。

举个例子,假设我想编码一个整数(8 字节),然后编码一个数字(4 字节)。这是我尝试过的代码:

myint <- as.integer(1339700942)
mydouble <- 1.2
obj <- file(open='w+b') #I've tried textConnection too, but no good
w.int <- writeBin(myint, obj, size=8, endian='big')
w.double <- writeBin(mydouble, obj, size=4, endian='big')
Run Code Online (Sandbox Code Playgroud)

这允许我打开连接,但它只写了NULL. writeBin在这种情况下使用连接的正确方法是什么?

r binaryfiles

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

使用 Python 模块 fileinput 读取多个二进制文件的各个字节

我可以像这样读取二进制文件的第一个字节:

with open(my_binary_file,'rb') as f:
    f.read(1)
Run Code Online (Sandbox Code Playgroud)

但是我该如何使用 fileinput 模块来做到这一点呢?如果我运行这段代码:

import fileinput
with fileinput.FileInput(my_binary_file,'rb') as f:
    f.read(1)
Run Code Online (Sandbox Code Playgroud)

然后我得到这个错误:

AttributeError: 'FileInput' object has no attribute 'read'
Run Code Online (Sandbox Code Playgroud)

是否有类似于 fileinput 的模块,它允许我读取多个二进制文件的字节/字符而不是行?

编辑:读取二进制文件的一行并循环它不是一个选项,因为二进制文件很大并且不包含换行符。

python file-io binaryfiles python-3.x

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

在 Spark Scala 中读取二进制文件

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

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

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

我怎样才能做到这一点?

scala binaryfiles apache-spark

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

对二进制文件使用 Getline

我读过它的getline行为就像一个未格式化的输入函数。我相信应该允许它在二进制文件上使用。举例来说,我已经这样做了:

ofstream ouput("foo.txt", ios_base::binary);
const auto foo = "lorem ipsum";

output.write(foo, strlen(foo) + 1);
output.close();

ifstream input("foo.txt", ios_base::binary);
string bar;

getline(input, bar, '\0');
Run Code Online (Sandbox Code Playgroud)

这是否违反任何规则?它似乎工作得很好,我想我传统上只是看到通过写入大小然后写入数组来处理数组。

c++ string binaryfiles getline null-terminated

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

在python中将浮点二进制文件读入二维数组

现在我有一个包含浮点数据的二进制文件,每个数据是4个字节,我想将其读入一个2D数组,当我使用

B1 = np.fromfile('/home/lijiao/Documents/transform/Data/AHI8_OBI_1000M_NOM_20160812_0040.hdf_B1.dat', dtype=float)
Run Code Online (Sandbox Code Playgroud)

它会给我一个长度为60500000的一维数组,那么如何以每4个字节读取数据呢?

编辑:这是我的解决方案:

filename = '/home/lijiao/Documents/transform/Data/AHI8_OBI_1000M_NOM_20160812_0040.hdf_B1.dat'

with open(filename, 'rb') as f:
data = np.fromfile(f, dtype=np.float32)
array = np.reshape(data, [11000, 11000])
Run Code Online (Sandbox Code Playgroud)

python arrays numpy binaryfiles

5
推荐指数
0
解决办法
9401
查看次数

Java 高效读取大文件(~100GB)

我想用Java有效地读取一个巨大的二进制文件(~100GB)。我必须处理它的每一行。行处理将在单独的线程中进行。我不想将整个文件加载到内存中。分块阅读有用吗?最佳缓冲区大小是多少?有什么公式吗?

java io file-io binaryfiles

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

.fill .long 在汇编中意味着多少字节?

我有一个来自 github 的脚本https://github.com/akatrevorjay/edid-generator

它是用汇编编写的,现在我想用这个 Edid Stuff 做更多的操作,因为我从来没有做过汇编,所以我用 Python 编写它。为此我需要知道有多少字节

  1. .ascii
  2. .fill 7,2,0x0101
  3. .long
  4. .data

通常必须用Python“转换”它。

如果有帮助,这里是每个的完整代码行:

start1:         .ascii  "Linux #0"
                .fill   7,2,0x0101      /* Unused */
serial_number:  .long   SERIAL
                .data (Dont have more here)
Run Code Online (Sandbox Code Playgroud)

assembly binaryfiles data-conversion

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

使用 Python 和内存映射在二进制文件中查找位模式

我正在处理一个在开始时不是字节对齐的二进制文件。不久在文件中有一个 24 位模式 0xfaf330,它是一个同步标记,用于标记后续字节对齐数据。我在文件上使用 Python mmap 并希望在找到标记来处理文件的其余部分后使用 Python memoryview。那么,我如何找到 24 位模式,然后从那时起使用 mmap 和 memoryview?

binaryfiles python-3.x

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

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
查看次数