2016-09-23 10 views
-1

Uint8 *からUint8のベクトルを作成しようとしていますが、値の一部が同じでないためです。ここに私のコードです。uint8 *をベクトル<Uint8>に正しくコピーする方法

std::vector<Uint8> wav_vector = {}; 
Uint8* wav_buffer_; 
for (unsigned int i = 0; i < wav_length_; i++) { 
    wav_vector.push_back(wav_buffer_[i]); 
} 

は、その後、私は値を検証しようとしています:

for (unsigned int i = 0; i < wav_length_; i++){ 
    if (wav_buffer_[i]!=wav_vector[i]){ 
     cout<<i<<endl; 
     printf("Orignal Buffer %u\n", wav_buffer_[i]); 
     printf("Vector Buffer %u\n", wav_vector[i]); 

    } 
    } 

これらは私のサンプル出力です:

Index: 0 
Orignal Buffer 208 
Vector Buffer 40 

Index: 1 
Orignal Buffer 72 
Vector Buffer 3 

Index: 2 
Orignal Buffer 111 
Vector Buffer 183 

Index: 3 
Orignal Buffer 1 
Vector Buffer 97 

Index: 4 
Orignal Buffer 0 
Vector Buffer 79 

Index: 5 
Orignal Buffer 0 
Vector Buffer 127 

Index: 8 
Orignal Buffer 120 
Vector Buffer 40 

Index: 9 
Orignal Buffer 251 
Vector Buffer 3 

Index: 10 
Orignal Buffer 182 
Vector Buffer 183 

Index: 16 
Orignal Buffer 0 
Vector Buffer 176 

Index: 17 
Orignal Buffer 0 
Vector Buffer 200 

Index: 18 
Orignal Buffer 0 
Vector Buffer 109 

Index: 19 
Orignal Buffer 0 
Vector Buffer 1 

Index: 24 
Orignal Buffer 0 
Vector Buffer 176 

Index: 25 
Orignal Buffer 0 
Vector Buffer 200 

Index: 26 
Orignal Buffer 0 
Vector Buffer 109 

Index: 27 
Orignal Buffer 0 
Vector Buffer 1 

Index: 32768 
Orignal Buffer 16 
Vector Buffer 120 

すべてのヘルプは本当にいただければ幸いです。

注: 私はこれを試して動作します。しかし、私はビットシフトを必要とするいくつかの他のオーディオフォーマットを持っているので、forループを使用したいと思います。

std::vector<Uint8> wav_vector(&wav_buffer_[0], &wav_buffer_[wav_length_]); 
+1

あなた 'wav_buffer_'ポインタが正しく初期化されているか、それだけでどこを指していますか? –

+1

Sidenote:配列から 'vector'を初期化するには、明示的なループは必要ありません:' std :: vector wav_vector(wav_buffer_、wav_buffer_ + wav_length _); '完了。 – ShadowRanger

+0

はそのコンストラクタのどこかを指しています。 Uint8 * wav_buffer_; オーディオファイル::オーディオファイル(* SDL_AudioSpec wav_file、UINT8 * wav_buffer、 Uint32ののwav_length):wav_file_(wav_file)、wav_buffer_(wav_buffer)、 wav_length_(wav_length){// SDL_FreeWAV(wav_buffer)。 }私はそれを試してみましたが、エラーを取得し –

答えて

1

イテレータ(またはポインター)からコピーすることができstd::vectorのコンストラクタが存在するように見えます。

あなたが何かのように行うことができます:

std::vector<uint8_t> my_vector(&wave_buffer[0], &wave_buffer[N]); 
+0

ありがとう、それは動作しますが、私は16ビット、32ビット、符号付き16ビット、符号付き8ビット、符号なし16ビット、符号なし8ビット(現在のコードは、それ)。 wav_buffer_がforループのUint8型であるため、すべてのものをuint8_tに変換するためのビットシフトが必要なものがあります。これは私が今は完全にはわかりません。 –

関連する問題