gpt4 book ai didi

c++ - C++读写二进制文件

转载 作者:太空狗 更新时间:2023-10-29 23:52:09 25 4
gpt4 key购买 nike

我是 C++ 的新手,昨天才开始自学几个小时。所以:

我有一个未压缩的简单 beep.wav文件,只有大约 3 秒长,里面有一声哔哔声。

我最终想要实现的是,只读取文件,同时写入二进制数据,所有包括:headerftmdata 或所有十六进制可读数据并将其转储到一个简单的 beep.txt 中文件。

在 C++ 中这可能吗?如果是这样,我应该如何开始读取和转储二进制文件?

我可以使用 <fstream> 或多或少地读取文件类

#include <iostream>
#include <fstream>

int main()
{
ifstream myfile ("beep.wav", ios::in|ios::binary|ios::ate);
if (myfile.is_open())
{
//reading goes here
}
return 0;
}

最佳答案

yzt 所述,您需要提前知道.wav 中的内容以及顺序。据我所知,您将拥有标签、 header 和值(样本)以及压缩信息。所以,作为一个开始:

例如,如果您知道要做的第一件事是读取压缩率,那么您将通过提取可能是一个 double 来开始您的读取过程:

ifstream myfile("beep.wav", ios::in|ios::binary);

double compression_rate;
myfile.read((char*)&compression_rate, sizeof(compression_rate));

// As well as probably the sample rate...
double sample_rate;
myfile.read((char*)&sample_rate, sizeof(sample_rate));

然后,可能是样本数:

int nb_samples;
myfile.read((char*)&nb_samples, sizeof(nb_samples));

然后,这些样本的值...(此处存储为 doublevector)

vector<double> vect;
vect.resize(nb_samples);
myfile.read((char*)&vect[0], nb_samples * sizeof(double));

等等...

不过,你打开的 .wav 是由什么组成的?

一旦你完全掌握了内容,你可以走另一条路,从头开始编写你自己的.wav...


Getting started - and here.

Bytes - "Autopsy" of a PCM Wav file.

关于c++ - C++读写二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17139149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com