如何从任何文件中读取原始字节数组,并将该字节数组写回新文件?
据我所知,C库没有帮助将数值序列化为非文本字节流.如我错了请纠正我.
最常用的标准工具是htonlPOSIX等.这些功能有缺点:
用于将任意大小序列化为char8位标准字节的接口将落在C标准之间,该标准不真正确认8位字节,并且无论标准(ITU?)将八位位组设置为基本传输单位.但旧的标准没有得到修订.
现在C11有许多可选组件,可以添加二进制序列化扩展以及线程之类的东西,而不需要对现有实现提出要求.
这样的扩展是否有用,或者担心非二进制补充机器是否毫无意义?
我对C++和Google FlatBuffers中的文件流有基本了解.Schema文件非常简单,还可以创建缓冲区并从缓冲区指针读取.我没有得到的是如何将多个缓冲区保存到二进制文件中,然后读取该二进制文件以获取任何随机缓冲区.
这是一个带有两个浮点数的简单Schema:
table Car {
field_a:[float];
field_b:[float];
}
Run Code Online (Sandbox Code Playgroud)
.
用于构建缓冲区的函数(尽管没有保存文件):
bool save_flatbuf(string file_path, vector<double> vec_a, vector<double> vec_b) {
flatbuffers::FlatBufferBuilder builder;
auto vec_floats_a = builder.CreateVector(vec_a, vec_a.size());
auto vec_floats_b = builder.CreateVector(vec_b, vec_b.size());
auto mloc = CreateCar(builder, &vec_floats_a, &vec_floats_b);
builder.Finish(mloc);
// How to save it into a binary file with a list of "Cars"?
}
Run Code Online (Sandbox Code Playgroud)
.
还有一个从二进制文件中读取缓冲区后读取缓冲区的函数(没有文件读取):
bool read_flatbuf(string file_path) {
// How to get the buffer pointer to a "Car" from a binary file with a "list of Cars" ? …Run Code Online (Sandbox Code Playgroud) 我想在没有安装prolog的机器上运行swi-prolog程序(实际上是服务器).
序言代码swipl_test.pl:
main :- write('Hello, world\n').
Run Code Online (Sandbox Code Playgroud)
在本地机器4.4.0-64-generic #85~14.04.1-Ubuntu SMP Mon Feb 20 12:10:54 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux制作二进制hello有SWI-Prolog version 7.2.3 for amd64:
swipl --goal=main --toplevel=halt --stand_alone=true --foreign=save -o hello1 -c swipl_test.pl
Run Code Online (Sandbox Code Playgroud)
移动hello远程计算机2.6.32-5-amd64 #1 SMP Wed Jun 17 16:09:06 UTC 2015 x86_64 GNU/Linux会出现以下错误:
error while loading shared libraries: libswipl.so.7.2: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
如何从prolog代码中准备一个自包含的二进制文件?我在远程计算机上没有sudo权限.
在clojure中解析二进制数据的最简洁方法是什么?我需要能够同样干净地读/写文件或套接字.
就像是:
(read-data source-of-data)
=> { :index 42 , :block-size 4 , data-size: 31415, :data (1 2 3 4 ...)}
以及将数据放回的反向.以某种方式定义结构并使读写函数使用相同的定义真的很棒.
有时我们的项目树可以有二进制文件,例如jpg,png,doc,xls或pdf.当仅更改二进制文件的一部分时,GIT,Mercurial,SVN或其他工具能否做得很好?
例如,如果规范是用.doc编写的并且它是存储库的一部分,那么如果它是4MB,并且编辑了100次但只是1或2行,并且在一年中检查了100次,那么它是400MB .
如果它是100个不同的.doc和.xls文件,那么它是40GB ......不是一个易于管理的大小.
我已经尝试过GIT和Mercurial并且看到它们似乎都添加了大量的数据,即使在.doc或.pdf中更改了1行.GIT或Mercurial或SVN内部还有其他方法可以完成这项工作吗?
我需要从命令行以二进制模式提交jar文件.
我应该使用什么命令?以下不起作用:
$ cvs commit -kb -m "Committing v2.5.7" myJar.jar
Usage: cvs commit [-Rlf] [-m msg | -F logfile] [-r rev] files...
-R Process directories recursively.
-l Local directory only (not recursive).
-f Force the file to be committed; disables recursion.
-F logfile Read the log message from file.
-m msg Log message.
-r rev Commit to this branch or trunk revision.
Run Code Online (Sandbox Code Playgroud) 我有3个二进制文件.让我们给他们打电话file1.bin,file2.bin和file3.bin.
file1.bin并file2.bin有一些共同的部分.file2.bin并file3.bin有一些共同的部分.我想找到的公共部分file1.bin和file2.bin那些之间不同的file2.bin和file3.bin.
您如何推荐实现这一目标?我已经使用二进制文件转储到文本文件xxd,然后使用三维差异vim -d file1.txt file2.txt file3.txt.
但是,vim将所有文件中的部分标记为已更改,即使它仅在一个文件中更改并在其他两个文件中保持不变.我希望这些特殊类型的事件标记不同.
我正在尝试创建一个库,我想在其中包含一些二进制(或文本)文件,这些文件将具有将在运行时解析的数据.
我的目的是控制这些文件,不断更新它们并在每次更新时更改库的版本.
这可能通过货物吗?如果是这样,我如何从我的库中访问这些文件?
我想到的一个解决方法是包含一些.rs带有结构和/或常量的文件,这些文件&str会存储数据,但我觉得它很难看.
编辑:
我已经将接受的答案更改为更适合我的案例,但请查看Shepmaster的答案,因为这可能更适合您的情况.
写入二进制文件时,什么时候应该使用.binvs .dat?如果我只是想存储不适合人类阅读的信息,例如商品描述/序列号对,那么如果我只是想使其无法从文本编辑器中读取,那么我选择哪一个是否重要?
binaryfiles ×10
c ×2
binary-data ×1
c# ×1
c++ ×1
clojure ×1
cvs ×1
diff ×1
dvcs ×1
endianness ×1
filestream ×1
flatbuffers ×1
fstream ×1
git ×1
htonl ×1
libraries ×1
macos ×1
mercurial ×1
portability ×1
rust ×1
rust-cargo ×1
svn ×1
swi-prolog ×1
vb.net ×1
vim ×1