繁体   English   中英

C ++ ifstream读取不能存储到短数组缓冲区

[英]c++ ifstream read can't store into short array buffer

我想将数据从ifstream存储到短数组,

但是它在打印出运行2之前崩溃了

short *Data;
// 88200 / (16/8) = 44100

size_t sdata_size = wavHeader.data_size /(wavHeader.bits_per_sample/8);

Data = new short [sdata_size];

std::cout << "run1" << std::endl;

in.read ((char*)&Data,sdata_size);

std::cout << "run2" << std::endl;

好的,正如艾伦·伯特尔斯(Alan Birtles)指出的那样,我做了一些更正,

short *Data;
// 88200 / (16/8) = 44100
Data = new short [wavHeader.data_size/(wavHeader.bits_per_sample/8)];

std::cout << "run1" << std::endl;

in.read ((char*)Data,wavHeader.data_size /(wavHeader.bits_per_sample/8));

std::cout << "run2" << std::endl;

in.close();

// this start point at first element and then increment to next array
short *ptr1 = Data;
// this start at the end element and then decrement to the next,
//- minus 1 for last element
 short *ptr2 = Data 
+(wavHeader.data_size/(wavHeader.bits_per_sample/8)) - 1;

for (; ptr1 < ptr2; ++ptr1, --ptr2)
{
  short tmp = *ptr1;
  *ptr1 = *ptr2;
  *ptr2 = tmp;
}
out.write ((char*)Data,wavHeader.data_size /(wavHeader.bits_per_sample/8));

// clean up the new
delete [] Data;

我要实现的是我要反转wav音频数据并将其写入另一个wav文件。 但是输出错误是什么主意呢?

预期结果在此处输入图像描述

我的结果

在此处输入图片说明

(char*)&Data应该只是(char*)Data并且您应该创建一个大小为sdata_size / sizeof( short )的数组(假设sdata_size是2的倍数)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM