Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 读取波头c++;_C++_Wav - Fatal编程技术网

C++ 读取波头c++;

C++ 读取波头c++;,c++,wav,C++,Wav,因此,我试图读取一个wav文件的头,由于某种原因,我只能读取它的一部分 Im使用此结构存储数据: struct WaveHeaderType { char chunkId[4]; unsigned long chunkSize; char format[4]; char subChunkId[4]; unsigned long subChunkSize; unsigned short audioFormat; unsigned short

因此,我试图读取一个wav文件的头,由于某种原因,我只能读取它的一部分

Im使用此结构存储数据:

struct WaveHeaderType
{
    char chunkId[4];
    unsigned long chunkSize;
    char format[4];
    char subChunkId[4];
    unsigned long subChunkSize;
    unsigned short audioFormat;
    unsigned short numChannels;
    unsigned long sampleRate;
    unsigned long bytesPerSecond;
    unsigned short blockAlign;
    unsigned short bitsPerSample;
    char dataChunkId[4];
    unsigned long dataSize;
};
下面是读取文件的代码:

WaveHeaderType waveFileHeader;

fread(&waveFileHeader, sizeof(waveFileHeader), 1, filePtr);
在此之后,只有chunkId、chunkSize、format和subChunkId有值,其余的都是null。我做错了什么?或者我只是碰巧有一个损坏的wav文件?(我可以在kmplayer中播放wav文件,没有问题)

这可能就是你的意思。With&将是指针的大小,因此您只读取4或8个字节

也可以考虑在结构上使用某种类型的语法包,除非你从一个正式的标题中看到,在成员之间打交道会导致与文件不同的布局。

这可能就是你的意思。With&将是指针的大小,因此您只读取4或8个字节

也考虑在结构上使用某种类型的语法包,除非您从一个正式的头文件中得到,否则成员之间可能会有一个与文件不同的布局。

< P>而不是<代码> siZeof(& WaveFieleHead)< /Cord>您需要编写<代码> siZeof(WaveFielHead)< /Calp>

sizeof(&waveileheader)
在32位系统中提供恒定的4字节(指针大小)

sizeof(waveileheader)
给出了
waveileheader
struct

的字节大小,而不是
sizeof(&waveileheader)
您需要编写
sizeof(waveileheader)

sizeof(&waveileheader)
在32位系统中提供恒定的4字节(指针大小)


sizeof(waveileheader)
给出了
waveileheader
struct

的字节大小,您要读取的结构大小是
sizeof(waveileheader)

使用
&
可以读取指向waveFileHeader的元素的大小

尝试:


您想读取结构的大小,即
sizeof(waveFileHeader)

使用
&
可以读取指向waveFileHeader的元素的大小

尝试:


除了上面提到的“指针的大小与结构的大小不同”之外,当我看到数据结构中的
无符号long
应该存储在文件中(或从文件中读取)时,我非常担心。这正是将代码从32位环境移动到64位环境(或从一个编译器移动到另一个编译器,或使用相同的编译器,但在不同的处理器类型上)时出错的类型


您应该使用大小定义的类型,例如
uint8\u t
uint16\u t
uint32\u t
,等等。

除了上面提到的“指针的大小与结构的大小不一样”之外,当我在应该存储在文件中的数据结构中看到
无符号long
时,我非常担心(或从文件中读取)。这正是将代码从32位环境移动到64位环境(或从一个编译器移动到另一个编译器,或使用相同的编译器,但在不同的处理器类型上)时出错的类型


您应该使用大小定义的类型,例如
uint8\u t
uint16\u t
uint32\u t
,等等。

使用固定结构(如您正在做的)可以用于许多WAV文件,但文件头中可能有其他元素,并且某些字段的大小可能不同使用mmioOpen进行rting,您可以使用它来解析文件,如下所示:


使用您正在使用的固定结构可以用于许多WAV文件,但文件头中可能有其他元素,某些字段的大小可能不同。有一系列API函数,以mmiopen开头,您可以使用它们来解析文件,如图所示:


我不知道它是怎么来的,不应该是指针。但这根本解决不了问题。(指针来自一个早期版本,我试图弄乱它,但这确实是错误的方向)我不知道它是怎么来的,不应该是指针。但这根本解决不了问题。(指针来自一个早期版本,我试图弄乱一点,但这确实是错误的方向)我不知道它是如何到达那里的,不应该是指针。但这根本解决不了问题。(指针来自一个早期版本,我试图弄乱一点,但这确实是错误的方向)我不知道它是怎么来的,不应该是指针。但这根本解决不了问题。(指针来自一个早期版本,我试图把它弄糟一点,但那确实是错误的方向)我不知道它是怎么来的,不应该是指针。但这根本解决不了问题。(指针来自一个早期版本,我试图弄乱一点,但这确实是错误的方向)我不知道它是如何到达那里的,不应该是指针。但这根本解决不了问题。(指针来自一个早期版本,我试图弄乱一点,但这确实是错误的方向)你用二进制模式打开了文件,是吗?你用二进制模式打开了文件,是吗?
fread(&waveFileHeader, sizeof(waveFileHeader), 1, filePtr);
fread(&waveFileHeader, sizeof(waveFileHeader), 1, filePtr);