2016-09-23 105 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

旁注:从数组中初始化一个'vector'不需要显式循环:'std :: vector wav_vector(wav_buffer_,wav_buffer_ + wav_length _);'完成。 – ShadowRanger

+0

它指向构造函数的某处。 Uint8 * wav_buffer_; 的AudioFile ::的AudioFile(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

谢谢,这有效,但我想尝试使用for循环,因为我有一些其他音频格式,例如16位,32位,有符号16位,有符号8位,无符号16位,无符号8位(当前代码是它)。其中一些需要位转换将所有内容转换为uint8_t,因为wav_buffer_是for循环中的Uint8类型,我现在还不完全确定。 –