Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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+中的波形文件采样率+;? 在学习Wave文件格式和C++的同时,出于好奇,我偶然发现了WAVE格式的规范布局。 现在,我试着写一个C++程序来读出样本率 char buffer[4]; // already read other values before reading sample rate inFile.read(buffer, 4); // conversion using little endian sampleRate = (long) buffer[0] + ((long) buffer[1] << 8) + ((long) buffer[2] << 16) + ((long) buffer[3] << 24); char缓冲区[4]; //在读取采样率之前已读取其他值 填充读取(缓冲区,4); //使用小端元的转换 sampleRate=(长)缓冲区[0]+((长)缓冲区[1]_C++_Hex - Fatal编程技术网

如何正确读取C+中的波形文件采样率+;? 在学习Wave文件格式和C++的同时,出于好奇,我偶然发现了WAVE格式的规范布局。 现在,我试着写一个C++程序来读出样本率 char buffer[4]; // already read other values before reading sample rate inFile.read(buffer, 4); // conversion using little endian sampleRate = (long) buffer[0] + ((long) buffer[1] << 8) + ((long) buffer[2] << 16) + ((long) buffer[3] << 24); char缓冲区[4]; //在读取采样率之前已读取其他值 填充读取(缓冲区,4); //使用小端元的转换 sampleRate=(长)缓冲区[0]+((长)缓冲区[1]

如何正确读取C+中的波形文件采样率+;? 在学习Wave文件格式和C++的同时,出于好奇,我偶然发现了WAVE格式的规范布局。 现在,我试着写一个C++程序来读出样本率 char buffer[4]; // already read other values before reading sample rate inFile.read(buffer, 4); // conversion using little endian sampleRate = (long) buffer[0] + ((long) buffer[1] << 8) + ((long) buffer[2] << 16) + ((long) buffer[3] << 24); char缓冲区[4]; //在读取采样率之前已读取其他值 填充读取(缓冲区,4); //使用小端元的转换 sampleRate=(长)缓冲区[0]+((长)缓冲区[1],c++,hex,C++,Hex,最简单的方法如下: // simply store bytes directly into sampleRate long sampleRate = 0; inFile.read(&sampleRate, 4); 正如您可能怀疑的那样,这假设您的系统是little Endian。要修复您的示例,您必须避免在强制转换为long时发生的符号扩展。声明类型为unsigned char的buffer。请参阅以下内容 unsigned char buffer[4]; inFile.read(bu

最简单的方法如下:

// simply store bytes directly into sampleRate
long sampleRate = 0;
inFile.read(&sampleRate, 4);
正如您可能怀疑的那样,这假设您的系统是little Endian。要修复您的示例,您必须避免在强制转换为long时发生的符号扩展。声明类型为
unsigned char
buffer
。请参阅以下内容

unsigned char buffer[4];
inFile.read(buffer, 4);
long sampleRate = (long)buffer[0] + ((long)buffer[1] << 8) + ((long)buffer[2] << 16) + ((long)buffer[3] << 24);
无符号字符缓冲区[4];
填充读取(缓冲区,4);

long sampleRate=(long)buffer[0]+((long)buffer[1]最简单的方法如下:

// simply store bytes directly into sampleRate
long sampleRate = 0;
inFile.read(&sampleRate, 4);
正如您可能怀疑的那样,这假设您的系统是little Endian。要修复您的示例,您必须避免在强制转换为long时发生的符号扩展。声明类型为
unsigned char
buffer
。请参阅以下内容

unsigned char buffer[4];
inFile.read(buffer, 4);
long sampleRate = (long)buffer[0] + ((long)buffer[1] << 8) + ((long)buffer[2] << 16) + ((long)buffer[3] << 24);
无符号字符缓冲区[4];
填充读取(缓冲区,4);

long sampleRate=(long)buffer[0]+((long)buffer[1]修复代码有两种方法。第一种方法是通过使所有内容都无符号来确保始终使用无符号算术。第二种方法是使用位掩码来删除符号扩展

sampleRate = ((long) buffer[0] & 0xff) + (((long) buffer[1] << 8) & 0xff00) + (((long) buffer[2] << 16) & 0xff0000) + ((long) buffer[3] << 24);

sampleRate=((长)缓冲区[0]&0xff)+((长)缓冲区[1]修复代码有两种方法。第一种方法是通过使所有内容都无符号来确保始终使用无符号算术。第二种方法是使用位掩码删除符号扩展

sampleRate = ((long) buffer[0] & 0xff) + (((long) buffer[1] << 8) & 0xff00) + (((long) buffer[2] << 16) & 0xff0000) + ((long) buffer[3] << 24);

sampleRate=((长)缓冲区[0]&0xff)+((长)缓冲区[1]
缓冲区的类型是什么?
?尝试使用
无符号的
。使用
+
而不是
的原因是什么?@Xymostech,用于不重叠的位模式,它们是等效的。使用缓冲区类型更新了原始问题。实际上,我使用了默认的有符号字符[]。此外,infle是一个ifstream对象。sampleRate是long@Karoly,我开始了一个类似的线程,下面是Andrew的答案方法不接受无符号字符*我在Mac Mountain Lion上试过g++编译器,也试过cygwin的g++-3.exe编译器。两个编译器都抱怨无符号字符*缓冲区的类型是什么?
无符号
?用
无符号
试试。你为什么要用
+
而不是
?@Xymostech来处理不重叠的位模式呢Equivalent.用缓冲区类型更新了原始问题。实际上,我使用了默认的带符号字符[]。此外,inflee是一个ifstream对象。sampleRate是long@Karoly,我开始了一个类似的线程,下面是Andrew的答案方法不接受无符号字符*我在Mac Mountain Lion上尝试了g++编译器,以及cygwin的g++-3.exe编译器。两个编译器都抱怨无符号字符*你的infle对象是什么类型的?它也是ifstream吗?我看到了很多使用无符号字符[]的建议(我原来的Q只使用默认的有符号字符[])但是,如果我使用unsigned,g++编译器会失控
test.cpp:57:错误:从unsigned char*”到'char*'的转换无效test.cpp:57:错误:初始化'std::basic\u istream&std::basic\u istream::read(_CharT*,std::streamsize)[with _CharT=char,_Traits=std::char\u Traits]“
第57行引用了
infle.read(缓冲区,4);
您的infle对象的类型是什么?它也是ifstream吗?我看到了一些使用无符号字符[]的建议(我原来的Q只使用默认的有符号字符[])但是,如果我使用unsigned,g++编译器会失控
test.cpp:57:错误:从unsigned char*”到'char*'的转换无效test.cpp:57:错误:初始化'std::basic\u istream&std::basic\u istream::read(_CharT*,std::streamsize)[with _CharT=char,_Traits=std::char\u Traits]“
第57行指的是
infle.read(缓冲区,4)
除了ifstream的read方法不使用无符号字符缓冲区外,您发布的代码工作得很好。它似乎也不会对基本系统运行大或小的endian进行假设。除了ifstream的read方法不使用无符号字符缓冲区外,您发布的代码工作得很好。它似乎也不会对运行大型或小型Endian的基本系统。