2016-09-23 4 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 _); 'Done. – 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

Спасибо, что работает, но я хочу попробовать его использовать для цикла, поскольку у меня есть некоторые другие аудиоформаты, например, 16 бит, 32 бита, 16-битный, подписанный 8-битный, беззнаковый 16-битный, без знака 8 бит (текущий код для Это). Некоторые из них требуют смещения битов, чтобы преобразовать все в uint8_t, поскольку wav_buffer_ имеет тип Uint8 in for loop, который я пока не совсем уверен. –