我有一个long阵列.如何将此数组写入二进制文件?问题是,如果我将其转换为byte数组,则会更改某些值.
数组如下:
long array = new long[160000];
Run Code Online (Sandbox Code Playgroud)
提供一些代码段.
这可能是一个基本问题,但我想问,因为我不知道它.
如果我有一个二进制文件,它是在HP-UX上创建的,我突然在Linux上使用这个二进制文件,或者让我们说在AIX或sun solaris这样的任何其他平台上,如果我想查看二进制文件的详细信息,请参阅它是在哪个平台上开发的,我怎么能在任何平台上做到这一点?还是有一种通用的方式在unix的所有风格上做它?
我们的Mercurial存储库中有一堆XML文件.当我们将这些文件中的更改从一个分支合并到另一个分支时,Mercurial会抱怨我们的某些XML文件是二进制文件,并要求我在文件的本地版本和其他版本之间进行选择.
我发现Mercurial认为任何带有NULL字节的文件都是二进制文件,而我们的一些XML文件编码为UTF-16,所以包含很多NULL字节. 我的默认合并工具是Beyond Compare,它可以处理UTF-16编码的文件.我在Beyond Compare网站上按照推荐配置了Mercurial ,但在合并期间,Mercurial说:
工具bcomp无法处理二进制文件
是什么赋予了? 为什么Mercurial认为Beyond Compare无法合并我的文件?
我正在创建一个rubygem,我需要调用的二进制库位于用户确定的目录下的文件夹中.因此,我应该将这个6MB文件包含在我的rubygem的bin目录中,还是有更好的方法呢?
目前我正在为osx做这个.如果我想将它移植到Windows,我将有同样的问题,二进制文件也将是一个不同的文件类型.
在matlab中,我想从一个结构化的,相当大的文件(大小:18 + 2048*2048字节)中读取,其中18个拳头字节被分配给头部,其余的是像素图像强度.这里关注的是速度.正如您在下面的代码中看到的,对文件的多次访问大大降低了性能.您能否建议以更快的方式从文件中读取这些内容?例如,使用"fread"函数读取缓冲区中的整个内容.
fid = fopen(fileName, 'r', 'b'); % 'r' readonly and 'b' big endian
a= fread(fid,1,'uint16');
b1= fread(fid,1,'uint32');
b2= fread(fid,1,'uint32');
c1= fread(fid,1,'uint32');
c2= fread(fid,1,'uint32');
img=zeros (...
for i= (b1 + 1) : (b2 + 1)
for j= (c1 + 1) : (c2 + 1)
img(i, j) = fread(fid,1,'uint16');
end
end
Run Code Online (Sandbox Code Playgroud) 我想知道为我的二进制文件(可能是图像)选择最佳数据类型的最佳实践,我正在使用当前的grails项目.我考虑过了byte[].您的建议非常感谢.
谢谢!
我有一个原始二进制数据,我想将其转换为可读文本.
文本包含不可读的内容,它还有特殊字符,如带有NUL字的黑盒子或"N - [«'N- [«)>)ÿ".我只是python的新手.
这是我的代码
import struct
file = open('rawbinary.txt')
text = file.read()
struct.unpack("iiiii", text[:20])
Run Code Online (Sandbox Code Playgroud)
我的输出是:
(2113933569, 67305475, -80477197, 1536577129, 1312228259)
Run Code Online (Sandbox Code Playgroud)
如果添加这个:
text[:10]
Run Code Online (Sandbox Code Playgroud)
我的输出是
'\x01\x11\x00~\x03\x00\x03\x04\xf3\x03'
Run Code Online (Sandbox Code Playgroud)
我做得对吗?我下一步要做什么?
如何编写Float二进制文件的数组然后读取它?
var array: [Float]: [0.1, 0.2, 0.3]
func writeArrayToBinary(array: [Float]) {
//...
}
func readArrayFromBinary() -> [Float] {
//...
}
Run Code Online (Sandbox Code Playgroud) 我必须通过读取它们并创建一个位级数据结构(通常是1x134217728数组)来处理数千个二进制文件(每个16MB),以便在位级处理它们.
目前我这样做的方式如下:
conv = @(c) uint8(bitget(c,1:32));
measurement = NaN(1,(sizeOfMeasurements*8)) %(1,134217728)
fid = fopen(fileName, 'rb');
byteContent = fread(fid,'uint32');
fclose(fid);
bitRepresentation1 = arrayfun(conv, byteContent, 'UniformOutput', false);
measurement=[bitRepresentation1{:}];
Run Code Online (Sandbox Code Playgroud)
因此,我取代fopen与memmapfile如下:
m = memmapfile(fileName,'Format',{'uint32', [4194304 1], 'byteContent'});
byteContent = m.data.byteContent;
byteContent = double(byteContent);
Run Code Online (Sandbox Code Playgroud)
我为各个指令打印了时间信息(使用tic/ toc),结果表明瓶颈是:
bitRepresentation1 = arrayfun(conv, byteContent, 'UniformOutput', false); % see first line of code for conv
Run Code Online (Sandbox Code Playgroud)
是否有更有效的方法转换byteContent为存储每个索引位数的数组(即,这是一个位代表byteContent)?
在编写内核和操作系统时,无论是在汇编还是更高级别,都需要以平面二进制文件的形式汇编或编译代码,对吧?
你无法组装它或将它编译成ELF格式之类的东西,对吧?
如果这样做,处理器会将格式错误地解释为代码并开始执行意外的指令.
毕竟,您可以格式化可执行二进制文件,以便操作系统知道代码和日期段的开始和停止位置,然后将它们加载到GDT中并将它们添加到分页结构中.
但是如果您正在编写的程序实际上是一个操作系统,那么它将不会像用户应用程序那样在操作系统上运行,因为它是操作系统,对吧?
也就是说,操作系统在金属上运行,而不是在任何其他软件上运行.
我在这里纠正吗?
binaryfiles ×10
arrays ×2
file-io ×2
matlab ×2
assembly ×1
binary-data ×1
c# ×1
executable ×1
fasm ×1
grails ×1
groovy ×1
ios ×1
mercurial ×1
merge ×1
performance ×1
python ×1
python-2.7 ×1
ruby ×1
rubygems ×1
swift ×1
unix ×1
xml ×1