据我了解,MP3 文件格式本质上由两个片段组成,id3 元数据+音频帧。如何以二进制形式读取所有 id3 段和所有音频帧作为两个二进制 blob?我希望简单地将元数据和音频作为文件中的两个独立单元执行哈希计算。如何确定“分割点”在文件中的位置?
我有一个由fortran代码生成的二进制文件.该文件包含一系列双精度数.我需要在我的C程序中打开它,然后像通常的数组一样使用它.
我该怎么做?
二进制文件中如何表示double类型?
这是我作业的一部分,我很难解决.
我有一个简单的结构:
typedef struct Client {
char* lname;
unsigned int id;
unsigned int car_id;
} Client;
Run Code Online (Sandbox Code Playgroud)
演习是:
创建一个名为公司名称的文本文件,然后创建带有txt扩展名的分支编号.该文件包含所有客户的详细信息.
您在练习1中创建的文件将被压缩.因此,使用.cmpr扩展创建二进制文件.
我真的不知道如何实施2.
我记得在讲座中教授说我们必须使用"全部"变量,使用二元运算符(<<,>>,|,&,〜),但我不知道如何使用它.
我在GCC和Eclipse下使用Ubuntu.我正在使用C.
我很乐意得到帮助.谢谢!
我正在读二进制格式,例如ELF格式,所以假设我有两个二进制文件,一个编译为ELF文件,另一个编译为COFF(或另一种二进制格式),内核如何处理这个?我的意思是,当你执行程序时,linux如何知道如何处理每种不同的格式?有内核的一些接口根据二进制文件的头部选择,正确的代码来处理各种二进制文件?
如何将单色 bmp 图像文件(在我的情况下为 16*16 像素)转换为二进制格式?此代码读取位图信息。我必须将像素信息存储到一个数组中并且它没有正确存储。我已经分享了代码
#pragma pack(push, 1)
typedef struct BitMap
{
short Signature;
long Reserved1;
long Reserved2;
long DataOffSet;
long Size;
long Width;
long Height;
short Planes;
short BitsPerPixel;
long Compression;
long SizeImage;
long XPixelsPreMeter;
long YPixelsPreMeter;
long ColorsUsed;
long ColorsImportant;
long data[16];
}BitMap;
#pragma pack(pop)
Run Code Online (Sandbox Code Playgroud)
读取图像文件:
struct BitMap source_info;
struct Pix source_pix;
FILE *fp;
FILE *Dfp;
Dfp=fopen("filename.bin","wb")
if(!(fp=fopen("filename.bmp","rb")))
{
printf(" can not open file");
exit(-1);
}
fread(&source_info, sizeof(source_info),1,fp);
printf("%d\n",source_info.DataOffSet);
printf("%d\n",source_info.Width*source_info.Height);
for(i=0;i<16;i++)
fprintf(Dfp,"%d\t",source_info.data[i]);
Run Code Online (Sandbox Code Playgroud)
使用十六进制编辑器观察到的输出是

突出显示的数据我想存储在数据数组中,以便我可以在代码中进一步使用它。
但是 filename.bin 中的输出是
0 …Run Code Online (Sandbox Code Playgroud) 我的程序在Fortran中读取"未格式化"的文件.除此之外,这个文件包含一个我的程序不需要的数组,但是它可以变得非常大.我想跳过这个数组.
如果这是编写数据的程序:
program write
real :: useless(10), useful=42
open(123, file='foo', form='unformatted')
write(123) size(useless)
write(123) useless
write(123) useful
end program write
Run Code Online (Sandbox Code Playgroud)
然后这适用于阅读:
program read
integer :: n
real, allocatable :: useless(:)
real :: useful
open(123, file='foo', form='unformatted')
read(123) n
allocate(useless(n))
read(123) useless
read(123) useful
print*, useful
end program read
Run Code Online (Sandbox Code Playgroud)
但我想避免分配"无用"数组.我发现了这个
program read2
integer :: n, i
real :: useless
real :: useful
open(123, file='foo', form='unformatted')
read(123) n
do i=1,n
read(123) useless
end do
read(123) useful
print*, useful
end program read2
Run Code Online (Sandbox Code Playgroud)
不起作用( …
我是初学者.我试图在运行时从二进制文件构建一个2d数组.我收到了"内存不足"的错误.我在windows7中使用Perl 5.16.3.我的输入文件大小约为4.2MB.我的系统具有4GB的物理内存,我使用90%的使用率,然后在运行此代码时显示内存不足错误.
我尝试了很多方法来调试它.只有当我将b32减少到b16或更低时,我才能成功运行.即使这样,如果文件大小增加超过4MB,则错误再次出现.我尝试在执行代码时查看任务管理器中的物理内存使用情况,并且不断增加.
我的朋友怀疑这应该是内存泄漏问题.我无法与他的嫌犯弄清楚.我需要帮助解决这个问题.
#!/usr/bin/perl
use strict;
use warnings;
open( DATA, 'debug.bin' ) or die "Unable to open:$!";
binmode DATA;
my ( $data, $n, $i );
my @2dmatrix;
while ( $n = read DATA, $data, 4 ) {
push @2dmatrix, [ split( '', unpack( 'b32', $data ) ) ];
}
print scalar(@2dmatrix);
print "completed reading";
close(DATA);
Run Code Online (Sandbox Code Playgroud)
只是为了明确要求.从2d数组构建中,我需要从列B中的特定模式(11111111000000001111111100000000)对应的列A中提取内容.这需要在文件大小为500Mb的4组列上完成.
perl binaryfiles out-of-memory dynamic-arrays perl-data-structures
我需要用Perl中的其他内容(文本或二进制)替换二进制内容.
如果内容是文本的,我可以使用s ///来替换内容.
my $txt = "tomturbo";
$txt =~ s/t/T/g; # TomTurbo
Run Code Online (Sandbox Code Playgroud)
但如果内容是二进制的,那就不起作用了.
有没有一种简单的方法来处理?
谢谢!
我可以用Rust写二进制代码到文件.但是,当我创建文件时,创建的文件是文本文件,而不是二进制文件.我可以用这样的C++创建一个二进制文件:
ofstream is("1.in", ofstream::binary | ofstream::out | ofstream:: trunc);
Run Code Online (Sandbox Code Playgroud)
在Rust怎么样?这是我的尝试:
struct IndexDataStructureInt {
row: u32,
key_value: u32,
}
let mut index_arr: Vec<IndexDataStructureInt> = Vec::new();
// doing something push 100 IndexDataStructureInt to index_arr
let mut fileWrite = File::create(tableIndexName).unwrap();
for i in 0..index_arr.len() {
write!(
fileWrite,
"{:b}{:b}",
index_arr[i].row, index_arr[i].key_value
);
}
Run Code Online (Sandbox Code Playgroud)
运行此代码后,它会将200 u32整数二进制数写入文件tableIndexName.但是,文件大小不是800字节.大约是4KB.
binaryfiles ×10
c ×3
file-format ×2
fortran ×2
perl ×2
binary ×1
compression ×1
file ×1
id3 ×1
io ×1
kernel ×1
lame ×1
linux-kernel ×1
monochrome ×1
mp3 ×1
regex ×1
rust ×1
xml ×1