【发布时间】:2016-09-23 21:36:33
【问题描述】:
我正在尝试从 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_]);
【问题讨论】:
-
您的
wav_buffer_指针已正确初始化还是只是指向某个地方? -
旁注:从数组初始化
vector不需要显式循环:std::vector<Uint8> wav_vector(wav_buffer_, wav_buffer_+wav_length_);完成。 -
它指向构造函数中的某个地方。 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); }
-
如果在执行复制的循环期间打印数组元素,您会看到什么?
-
循环没有理由不工作。如果将
cout << wav_buffer_[i];放入复制循环中,您会看到什么?您看到的值是否与您在打印数组和向量之间差异的循环中看到的值相同?