2016-09-23 2 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]); 
} 

그럼 나중에 내가 값을 확인하는 것을 시도하고있다 : 어떤 도움이 정말 감사하겠습니다

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 (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]); 

    } 
    } 

이러한 내 샘플 출력입니다.

참고 : 시도해 보았습니다. 그러나 비트 이동이 필요한 다른 오디오 형식이 있으므로 for 루프를 사용하고 싶습니다. 반복자 (또는 포인터)에서 복사 할 수 있습니다 std::vector의 생성자가 같은

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_; 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<uint8_t> my_vector(&wave_buffer[0], &wave_buffer[N]); 
+0

고마워, 그 작품,하지만 내가 16 비트, 32 비트, 16 비트 서명, 8 비트, 서명되지 않은 16 비트, 부호없는 8 비트 (현재 코드에 대한) 예를 들어, 다른 오디오 포맷을 가지고 루프를 사용하여 그것을 시도하고 싶습니다 그것). wav_buffer_가 for 루프의 Uint8 유형이므로 모든 것을 uint8_t로 변환하는 비트 시프트가 필요합니다.이 루프는 현재 완전히 확실하지 않습니다. –

관련 문제