3

バイナリファイルからshortを読み込もうとしていますが、0が多くなります。

これが書き込み機能です

void AudioBuffer::WriteToFile(const string& strFilename)
{
  fstream fout(strFilename.c_str(), ios::out|ios::binary);
  short sample;
  for (VECTOR_SHORT_ITER iter = m_vectorSamples.begin(); iter !=  m_vectorSamples.end(); iter++)
  {
    sample = (short) *iter;
    fout.write((char *) &sample, sizeof(short));
  }
  fout.close();
}

そして、これは私が読み取り機能のために持っているものです、私はatoiでオーバーフローする可能性があることを知っています

  void AudioBuffer::FileToBuffer(const string& strFilename)
  {
      fstream fin(strFilename.c_str(), ios::in|ios::binary);
      short iSample;
      char *temp = new char[sizeof(short)];

      cout<<"Samples Output"<<endl;
      while(!fin.eof())
      {
          fin.read(temp,sizeof(short));
          iSample = atoi(temp);
          cout<<iSample< " ";
          m_vectorSamples.push_back(iSample);
          *temp = NULL;
       }
      fin.close();
  }

また、* temp = NULLを実行してcharポインターをクリアするのは最善ではありませんか?

ありがとう

4

1 に答える 1

2

生のビットをファイルに書き込んでいるだけなので、同じように読みたいと思います。次の順序で何かを読みます。

void AudioBuffer::FileToBuffer(const string& strFilename)
{
    ifstream fin(strFilename.c_str(), ios::in|ios::binary);
    short iSample;

    cout<<"Samples Output"<<endl;
    while(fin.read((char *)&iSample,sizeof(short)))
    {
        cout<<iSample<< " ";
        m_vectorSamples.push_back(iSample);
    }
}
于 2012-12-21T04:31:39.220 に答える