简体   繁体   English

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

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

i want to store the data from ifstream to short array, 我想将数据从ifstream存储到短数组,

but it crash it before print out run 2 但是它在打印出运行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;

ok i done some correction as Alan Birtles point out, 好的,正如艾伦·伯特尔斯(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;

what i want to achieve is that i want to reverse the wav audio data and write it to another wav file. 我要实现的是我要反转wav音频数据并将其写入另一个wav文件。 however the output is wrong any ideas why? 但是输出错误是什么主意呢?

expected result enter image description here 预期结果在此处输入图像描述

my result 我的结果

enter image description here 在此处输入图片说明

(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