标签: binaryfiles

将位写入 C++ 文件

我正在研究霍夫曼编码,我已经用一个构建了字符频率表

std::map<char,int> frequencyTable;
Run Code Online (Sandbox Code Playgroud)

然后我构建了霍夫曼树,然后我以这种方式构建了代码表:

std::map<char,std::vector<bool> > codes;
Run Code Online (Sandbox Code Playgroud)

现在我将逐个字符地读取输入文件,并通过代码表对它们进行编码,但我不知道如何将位写入二进制输出文件。有什么建议吗?

更新:现在我正在尝试使用这些功能:

void Encoder::makeFile()
{
char c,ch;
unsigned char ch2;
while(inFile.get(c))
{
    ch=c;
    //send the Huffman string to output file bit by bit
    for(unsigned int i=0;i < codes[ch].size();++i)
    {
        if(codes[ch].at(i)==false){
            ch2=0;
        }else{
            ch2=1;
        }
        encode(ch2, outFile);
    }
}
ch2=2; // send EOF
encode(ch2, outFile);

inFile.close();
outFile.close();
}
Run Code Online (Sandbox Code Playgroud)

和这个:

void Encoder::encode(unsigned char i, std::ofstream & outFile)
{
int bit_pos=0; //0 to 7 (left to right) on the byte block
unsigned char c; //byte block …
Run Code Online (Sandbox Code Playgroud)

c++ binaryfiles huffman-code

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

了解 Mp3 文件结构

我正在开发一个 mp3 隐写术项目,我想通过定期操作最低有效位 (LSB) 来对 mp3 文件内的文本进行编码。我想对该文本进行编码,而不对音频进行任何重大更改。根据此链接http://www.datavoyage.com/mpgscript/mpeghdr.htm有 mp3 标头,其中包含前导 mp3 块的信息。所以我想要指导如何才能做到这一点?

mp3 file-format steganography binaryfiles

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

写入二进制文件

我正在尝试在 Fortran 90 中编写 STL 二进制文件。该文件具有以下格式

HEADER:80 字节 ASCII 标头 - TITLE

4 字节无符号长整型,NO。刻面数量

每个方面的格式:

法向量,3 个浮点值,每个值 4 字节;

顶点 1 XYZ 坐标,3 个浮点值,每个值 4 字节;

顶点 2 XYZ 坐标,3 个浮点值,每个值 4 字节;

顶点 3 个 XYZ 坐标,3 个浮点值,每个值 4 字节;

2 个字节的无符号整数,应该为零;

我正在尝试创建一个未格式化的文件来写入相关信息,但在定义正确的记录长度时遇到问题。假设我有N个facet,我使用以下命令打开并写入信息

open(unit = 1, status = 'replace', iostat = ioerror, format = 'unformatted', access = 'direct', recl = 84 + N * 50, file = 'c:\temp\test.stl')
Run Code Online (Sandbox Code Playgroud)

我可以发出第一个写入语句来写出标头信息,然后发出第二个写入语句(在 do 循环内)来写出方面信息吗?

如果是这样,由于我有不同记录长度的标头和方面信息,因此每个写入语句需要的记录号是多少。

write(1,rec=?), *header information*
do,i=1,N,1
   write(1,rec=?), *facet information* …
Run Code Online (Sandbox Code Playgroud)

fortran binaryfiles stl-format

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

了解 Objdump 中反汇编的二进制文件 - 输出中的字段是什么

当我使用命令“arm-linux-gnueabihf-objdump -d a.out”反汇编一个简单的 ARM 二进制文件时,得到以下输出

00008480 <_start>:
8480:   f04f 0b00   mov.w   fp, #0
8484:   f04f 0e00   mov.w   lr, #0
8488:   bc02        pop {r1}
848a:   466a        mov r2, sp
Run Code Online (Sandbox Code Playgroud)

这里不同的列代表什么?例如,8480 和 f04f 0b00(来自代码的第二行)

binaryfiles objdump disassembly

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

在 Matlab 中快速加载大块二进制文件

我有一些相当大的 int16 格式的数据文件(256 个通道,大约 75-1 亿个样本 = 每个文件约 40-50 GB 左右)。它以平面二进制格式编写,因此结构类似于:CH1S1,CH2S1,CH3S1 ... CH256S1,CH1S2,CH2S2,...

我需要分别读取每个通道,进行过滤和偏移校正,然后保存。我当前的瓶颈是加载每个通道,这大约需要 7-8 分钟……扩大到 256 倍,光是加载数据就需要近 30 个小时!我正在尝试智能地使用 fread,在读取每个通道时跳过字节;我在所有 256 个通道上循环使用以下代码来执行此操作:

offset = i - 1;
fseek(fid,offset*2,'bof');
dat = fread(fid,[1,nSampsTotal],'*int16',(nChan-1)*2);
Run Code Online (Sandbox Code Playgroud)

仔细阅读,这通常是加载大型二进制文件部分的最快方法,但文件是否太大而无法更快地完成此操作?

我没有加载那么多数据...我正在使用的测试文件是 37GB,对于 256 个通道之一,我只为整个跟踪加载 149MB...也许是 fread 的“跳过”功能是次优的吗?

系统详细信息:MATLAB 2017a、Windows 7、64 位、32GB RAM

performance matlab binaryfiles

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

How to dissect a CUPS job control file '/var/spool/cups/cNNNNNN'?

When printing a job to a CUPS server, you can set up the cupsd.conf parameters PreserveJobHistory and PreserveJobFiles to control how many jobs you want to keep.

CUPS always temporarily stores the actual print job files in directory /var/spool/cups/. The spool files as submitted by the print client (before CUPS' conversion chain of filters kicks in) are always named dNNNNNN-001 (starting with a 'd' as in 'datafile') where NNNNNN is the job ID assigned by CUPS. If you submit …

binaryfiles cups ipp-protocol

4
推荐指数
2
解决办法
4781
查看次数

将二进制文件读入bash中的变量中

我有以下 bash 脚本。我希望文件 out.1 和 out.2 相同,但它们是不同的。我怀疑问题在于 bash 如何处理二进制文件。那么在 bash 中将二进制文件读入变量的正确方法是什么?

curl -s http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt > out.1
A=`curl -s http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt`
echo "$A" >  out.2
diff out.1 out.2
Run Code Online (Sandbox Code Playgroud)

bash binaryfiles

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

文件读取:二进制文件的feof()

我正在读一个二进制文件.当它到达终点时 似乎它被feof()函数终止了.是因为二进制文件没有EOF字符?如果是这样我怎么解决它.

目前我的代码正在使用while循环

while (!feof(f))
Run Code Online (Sandbox Code Playgroud)

当它到达位置5526900的文件末尾时,它不会停止.它只是不断尝试阅读,我陷入了困境.

任何人都可以告诉我为什么以及如何解决它.

谢谢

c c++ file-io binaryfiles

3
推荐指数
1
解决办法
3625
查看次数

Python:解析二进制stl文件

使用Python(2.7.1 32位和Windows 7 64)解析二进制STL文件时遇到一些困难.该文件的大小约为450k,但是在解析了~8600之外的244个三角形时,我的解析器突然停止工作,但struct.unpack除外:

Exception unpack需要一个长度为12的字符串参数

文件中的光标位置是第33行,第929行.但该行包含大约3400个字符.所以它似乎不是换行问题.

这是代码:

import struct

normals = []
points = []
triangles = []
bytecount = []

fb = [] # debug list

def unpack (f, sig, l):
    s = f.read (l)
    fb.append(s)
    return struct.unpack(sig, s)

def read_triangle(f):
    n = unpack(f,"<3f", 12)
    p1 = unpack(f,"<3f", 12)
    p2 = unpack(f,"<3f", 12)
    p3 = unpack(f,"<3f", 12)
    b = unpack(f,"<h", 2)

    normals.append(n)
    l = len(points)
    points.append(p1)
    points.append(p2)
    points.append(p3)
    triangles.append((l, l+1, l+2))
    bytecount.append(b[0])


def read_length(f):
    length = struct.unpack("@i", f.read(4)) …
Run Code Online (Sandbox Code Playgroud)

python binaryfiles

3
推荐指数
1
解决办法
3721
查看次数

如何从指定位置的二进制文件中读取一个且仅一个字节?

我想知道是否可能在python中一次读取一个给定位置的一个字节.我知道,但我想要的东西返回我指定的字节,只返回我指定的字节.如果我写:,它会读取文件的前10个字节.file.read(any number)file.read(10)

我怎么说读字节10只返回字节10?(这必须适用于所有大于一的数字),也请不要上课!

python byte binaryfiles binary-data

3
推荐指数
1
解决办法
635
查看次数