标签: binaryfiles

对二进制文件使用 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
查看次数

C# BinaryWriter 写入方法字符串大小

使用 C# 将字符串写入二进制文件时,长度(以字节为单位)会自动添加到输出中。根据MSDN 文档,这是一个无符号整数,但也是一个字节。他们给出的示例是,单个 UTF-8 字符将由三个写入字节组成:1 个大小字节和 2 个字符字节。这对于长度不超过 255 的字符串来说很好,并且与我观察到的行为相匹配。

但是,如果字符串长度超过 255 个字节,则无符号整数的大小会根据需要增加。作为一个简单的示例,将 1024 个字符视为:

string header = "ABCDEFGHIJKLMNOP";
for (int ii = 0; ii < 63; ii++)
{
  header += "ABCDEFGHIJKLMNOP";
}
fileObject.Write(header);
Run Code Online (Sandbox Code Playgroud)

结果在字符串前面添加了 2 个字节。创建 2^17 长度的字符串会产生一个有点令人抓狂的 3 字节数组。

因此,问题是如何知道读取多少字节才能获得读取时后续内容的大小?我不一定先验地知道标头大小。最终,我可以强制 Write(string) 方法始终使用一致的大小(例如 2 个字节)吗?

一个可能的解决方法是编写我自己的 write(string) 方法,但出于明显的原因我想避免这种情况(类似的问题在这里和这里接受此作为答案)。另一种更容易接受的解决方法是让读者查找启动 ASCII 字符串信息的特定字符(可能是不可打印的字符?),但这并非绝对正确。最后的解决方法(我能想到的)是强制字符串处于特定大小字节的大小范围内;再说一遍,这并不理想。

虽然强制字节数组的大小保持一致是最简单的,但我可以控制读取器,因此也欢迎任何聪明的读取器解决方案。

c# string size binaryfiles

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

是否可以为 VS Code 编写二进制文件导入扩展?

我想在 vs code 中显示二进制文件的一些信息。是否可以为 VS Code 编写一个扩展名,以便在资源管理器中选择该文件(或直接打开它)时,您会看到该扩展名从二进制文件中提取的一些文本?

因此,该扩展的核心功能将是(简化的)二进制到文本转换器。

有什么建议么?

binaryfiles visual-studio-code

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

使用Python将二进制文件上传到postgres服务器

我正在尝试将二进制文件上传到 postgres 服务器。我认为我正确地修改了Python脚本(https://gist.github.com/illume/8aa7c2d03273da846bf4361236a4f3f9#file-image_save-py),以便它将连接到我的postgres服务器,但我一直试图在命令行。据我了解,我需要导航到包含 image_save.py 脚本的目录并调用它。我还在同一目录中放置了一个测试文件,因此我尝试执行:

python image_save.py shuttle.jpg
Run Code Online (Sandbox Code Playgroud)

为此,我收到此错误:“错误:需要参数之一 --store --fetch 。”

然后我尝试:

python image_save.py --store shuttle.jpg
Run Code Online (Sandbox Code Playgroud)

我有:

  Traceback (most recent call last):
  File "image_save.py", line 45, in <module>
    main(sys.argv)
  File "image_save.py", line 30, in main
    curs.execute("INSERT INTO files(id, orig_filename, file_data) VALUES (DEFAULT,%s,%s) RETURNING id", (args.filename, filedata))
ValueError: A string literal cannot contain NUL (0x00) characters.
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

python -m image_save.py shuttle.jpg
Run Code Online (Sandbox Code Playgroud)

我得到“C:\Python27\python.exe: 没有名为 image_save.py 的模块”

我真的认为我只是错误地调用了脚本。谁能看到我做错了什么吗?

python postgresql binary binaryfiles psql

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

使用 pyspark 对大型二进制文件进行分区

尝试使用 PySpark 处理大型二进制文件,但总是出现 OutofMemoryError。尝试了所有可能的方法,例如增加执行器/驱动程序内存、重新分区 rdd。单个大型二进制文件会在 Spark 中进行分区吗?如果没有,我们如何处理二进制文件。我当前使用的二进制文件超过2GB。

binaryfiles apache-spark pyspark

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

如何解码/编码电缆调制解调器配置文件?

我目前正在研究DOCSIS及相关的一些内部工作原理。我有点困惑的一件事是如何制作电缆调制解调器配置文件。

根据我收集到的信息:

  • CM 配置是基于TLV格式的二进制文件。
  • 这些配置使用 TFTP 服务器进行部署,并在调制解调器启动时通过 DHCP 提示给调制解调器本身。

I'm interested in knowing how these config files are structured. I have next to no knowledge of TLV aside from what I've read these past days.

  • Is TLV just a generic method of stringing data together? It seems like TLV is used in both binary forms and json-like strings of clear text.
  • Is the T and/or L parts of TLV a set size (in bytes)? How do …

binaryfiles tlv

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

从文件中高效读取结构化二进制数据

我有以下代码片段,用于读取二进制文件并验证它:

 FileStream f = File.OpenRead("File.bin");
 MemoryStream memStream = new MemoryStream();
 memStream.SetLength(f.Length);
 f.Read(memStream.GetBuffer(), 0, (int)f.Length);
 f.Seek(0, SeekOrigin.Begin);
 var r = new BinaryReader(f);
 Single prevVal=0;
 do
 {
    r.ReadUInt32();
    var val = r.ReadSingle();
    if (prevVal!=0) {
       var diff = Math.Abs(val - prevVal) / prevVal;
       if (diff > 0.25)
          Console.WriteLine("Bad!");
    }
    prevVal = val;
 }
 while (f.Position < f.Length);
Run Code Online (Sandbox Code Playgroud)

不幸的是,它运行速度非常慢,我正在寻求改进。在 C++ 中,我只需将文件读入字节数组,然后将该数组重新转换为结构数组:

struct S{
   int a;
   float b;
}
Run Code Online (Sandbox Code Playgroud)

我将如何在 C# 中执行此操作?

c# optimization binaryfiles

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