标签: binaryfiles

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

git 扩展名和 *.xls

我们在 win7 上使用 git 和 gitExtension。有时我们需要使用 Excel 表格。我根据以下内容编辑了 .gitattributes 和 .git/config: Git Diff Indent/Pretty Print/Beautify Before Diff

作为转换器,我使用 VBS 脚本(它基于: http: //developer.rhino3d.com/guides/rhinoscript/reading-excel-files/ )和 cscript.exe

当在 gitExtension 中运行:Git bash 和命令:git diff file.xls 时,它会按我的预期显示更改。但在扩展中我可以看到 file.xls 已更改,但缺少 git diff 之类的比较。什么也没有——只有空荡荡的窗户。在编辑 .gitattributes 和 .git/config 之前,它(在此窗口中)显示它是二进制文件并且已更改。

任何人都可以帮助我如何设置 Git 扩展来显示 xls 文件和差异的文本解释(根据 vbs 脚本)内容。

经过几条评论后,我添加了 Git bash 的打印屏幕 - 您可以在这里看到它的一些工作原理(也许某些特殊字符存在问题,这些字符在控制台中显示为 < D8 > 或 ^M) 在此输入图像描述

还有另一个打印屏幕表单扩展 - 什么也没有 在此输入图像描述

我还研究了 git-extension 命令日志。在那里我可以看到它使用命令:

git diff --unified=3 -- TCs/pokusna_tabulka.xls
Run Code Online (Sandbox Code Playgroud)

在 git bash 中有效

git xls binaryfiles git-extensions

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

是否可以为 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
查看次数

可执行二进制文件的结构?

我可能不会在正确的位置问这个问题,但是在某个地方我可以研究可执行二进制文件的结构是什么吗?如,代码的组织方式,符号的存储位置等.

binary assembly executable binaryfiles

4
推荐指数
1
解决办法
1035
查看次数

Android glShaderBinary

与此问题类似,但对于Android:

Android GLES20支持glShaderBinary方法,该方法基于此 gles 文档将加载预编译的着色器二进制文件.但是,我无法找到任何方法来实际预编译任何二进制文件.但是,当我GLES20.glGetIntegerv使用参数名称调用时GLES20.GL_NUM_SHADER_BINARY_FORMATS,它确实指示(至少在我正在测试的设备上)有一个可用的着色器二进制格式.我只是不知道如何实际使用它.

shader android binaryfiles opengl-es-2.0

4
推荐指数
1
解决办法
3631
查看次数

将文本文件存储为二进制文件以便更快地读/写

我有一大堆需要处理的文本文件.现在表现非常好,多亏了pmap(),但我正在寻找额外的加速.当前的瓶颈是将字符串解析为浮点数.

我想到了加载我的数据(管道分隔的文本文件)并将它们写成二进制格式.从我所看到的,Julia应该能够以这种方式更快地加载我的数据.问题是我在将二进制数据写成二进制文件后将其加载回Julia的正确方法遇到了一些麻烦.

这是我用于加载,解析和写入二进制文件的一些示例代码:

input_file = "/cool/input/file.dat"   ## -- pipe delimited text file of Floats
output_file = "/cool/input/data_binary" 

open(input_file, "r") do in_file
    open(output_file, "w") do out_file
        for line in eachline(in_file)
            split_line = split(line, '|')
            out_float = parse(Float64, split_line[4])
            write(out_file, out_float)
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

问题是,当我将上述文件加载到Julia时,我不知道值是什么:

read(output_file)
n-element Array{UInt8,1}:
 0x00
 0x00
 0x00
 0x00
 0x00
 0x80
 0x16
Run Code Online (Sandbox Code Playgroud)

如何在Julia代码中将这些二进制值用作浮点数?更一般地说,如果我正在寻找性能提升,以这种方式将我的文本文件数据转换为二进制文件是否有意义?

binaryfiles julia

4
推荐指数
1
解决办法
714
查看次数